如果要将第三方库中的组件装配到程序中,无法使用自动装配。此时要用显示的装配:java装配或者xml装配

在javaconfig中配置bean对象

创建类时不需要在上面加@Component

在appConfig配置类里面自定义一个方法,加@bean注解
package com.yuan.demo.config;

import com.yuan.demo.dao.UserDao;
import com.yuan.demo.dao.impl.UserDaoNormal;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class AppConfig {

    @Bean
    public UserDao userDaoNormal(){
        System.out.println("创建UserDao对象");
        return new UserDaoNormal();
    }
}
test:
package com.yuan.demo.dao;


import com.yuan.demo.config.AppConfig;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = AppConfig.class)
public class UserDaoTest {
    @Autowired
    private UserDao userDao;

    @Test
    public void testAdd(){
        userDao.add();
    }
}



通过构造函数依赖注入

创建service接口和实现类
package com.yuan.demo.service;

public interface UserService {
        void add();
}
package com.yuan.demo.service.impl;

import com.yuan.demo.dao.UserDao;
import com.yuan.demo.service.UserService;


public class UserServiceNormal implements UserService {
    private UserDao userDao;

    @Override
    public void add() {
        userDao.add();
    }
}

用java config,需要修改AppConfig文件
package com.yuan.demo.config;


import com.yuan.demo.dao.UserDao;
import com.yuan.demo.dao.impl.UserDaoNormal;
import com.yuan.demo.service.UserService;
import com.yuan.demo.service.impl.UserServiceNormal;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class AppConfig {

    @Bean
    public UserDao userDaoNormal(){
        System.out.println("创建UserDao对象");
        return new UserDaoNormal();
    }

    @Bean
    public UserService userServiceNormal(){
        System.out.println("创建UserService对象");
        UserDao userDao = userDaoNormal();
        return new UserServiceNormal(userDao);
    }
}
此时,userserive当中的userdao没有被注入出来,通过构造函数注入
package com.yuan.demo.service.impl;

import com.yuan.demo.dao.UserDao;
import com.yuan.demo.service.UserService;


public class UserServiceNormal implements UserService {
    private UserDao userDao;

    public UserServiceNormal() {
        super();
    }

    public UserServiceNormal(UserDao userDao) {
        this.userDao = userDao;
    }

    @Override
    public void add() {
        userDao.add();
    }
}

Test
package com.yuan.demo.service;

import com.yuan.demo.config.AppConfig;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = AppConfig.class)
public class UserServiceTest {
    @Autowired
    private UserService userService;

    @Test
    public void testAdd(){
        userService.add();
    }
}



在@bean方法中使用参数

package com.yuan.demo.config;


import com.yuan.demo.dao.UserDao;
import com.yuan.demo.dao.impl.UserDaoNormal;
import com.yuan.demo.service.UserService;
import com.yuan.demo.service.impl.UserServiceNormal;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class AppConfig {

    @Bean
    public UserDao userDaoNormal(){
        System.out.println("创建UserDao对象");
        return new UserDaoNormal();
    }

    @Bean
    public UserService userServiceNormal(UserDao userDao){
        System.out.println("创建UserService对象");
        return new UserServiceNormal(userDao);
    }
}

通过setter方法依赖注入

在UserServiceNormal中添加seeter方法
package com.yuan.demo.service.impl;

import com.yuan.demo.dao.UserDao;
import com.yuan.demo.service.UserService;


public class UserServiceNormal implements UserService {
    private UserDao userDao;

    public UserServiceNormal() {
        super();
    }

    public UserServiceNormal(UserDao userDao) {
        this.userDao = userDao;
    }

    public void setUserDao(UserDao userDao) {
        this.userDao = userDao;
    }

    @Override
    public void add() {
        userDao.add();
    }
}
Appconfig中调用setter方法
package com.yuan.demo.config;


import com.yuan.demo.dao.UserDao;
import com.yuan.demo.dao.impl.UserDaoNormal;
import com.yuan.demo.service.UserService;
import com.yuan.demo.service.impl.UserServiceNormal;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class AppConfig {

    @Bean
    public UserDao userDaoNormal(){
        System.out.println("创建UserDao对象");
        return new UserDaoNormal();
    }

    @Bean
    public UserService userServiceNormal(UserDao userDao){
        System.out.println("创建UserService对象");
        UserServiceNormal userService = new UserServiceNormal();
        userService.setUserDao(userDao);
        return userService;
    }
}

处理JavaConfig的歧义性

跟自动装配的处理方法一样