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