如果要将第三方库中的组件装配到程序中,无法使用自动装配。此时要用显示的装配: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的歧义性
跟自动装配的处理方法一样

京公网安备 11010502036488号