如果把@Bean写在一个配置Bean里面,过于冗长,不利于维护,可以把配置Bean进行拆分,一个变多个,拆分之后有利于维护
、
例如:左边是spring与MyBatis的整合配置Bean,右边是事务相关的配置Bean
整合方式@Configuration与右边3个分别整合
跟多配制文件整合是相似的 以包进行扫描进行整合
@import整合对个配置Bean
Config包下:AppConfig1:创建UserService对象
package com.baizhiedu.config;
import com.baizhiedu.injection.UserService;
import com.baizhiedu.injection.UserServiceImpl;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
@Configuration
@Import(AppConfig2.class) //@Import把AppConfig2整合进来
public class AppConfig1 {
@Bean
public UserService userService(){
UserServiceImpl userService=new UserServiceImpl();
return userService;
}
}
AppConfig2:创建UserDAO对象
package com.baizhiedu.config;
import com.baizhiedu.injection.UserDAO;
import com.baizhiedu.injection.UserDAOImpl;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class AppConfig2 {
@Bean
public UserDAO userDAO(){
return new UserDAOImpl();
}
}
TestAnnotation2:
package com.baizhiedu;
import com.baizhiedu.bean.Customer;
import com.baizhiedu.config.AppConfig1;
import com.baizhiedu.injection.UserDAO;
import com.baizhiedu.injection.UserService;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
public class TestAnnotation2 {
//用于测试:@componentScan 扫描基础注解的使用
@Test
public void test1(){
ApplicationContext ctx=new AnnotationConfigApplicationContext(AppConfig2.class);
String[] beanDefinitionNames=ctx.getBeanDefinitionNames();//获取所有对象的id
for (String beanDefinitionName:beanDefinitionNames){
System.out.println("beanDefinitionName="+beanDefinitionName);
}
}
//用于测试:测试创建对象的优先级: @Component及其衍生注解<@Bean<配置文件bean标签
//高优先级会覆盖低优先级
@Test
public void test3(){
ApplicationContext ctx=new AnnotationConfigApplicationContext(AppConfig3.class);
Customer customer=(Customer) ctx.getBean("customer");
System.out.println("cus="+customer.getId());
System.out.println("cus="+customer.getName());
}
//测试:解耦合
@Test
public void test4(){
ApplicationContext ctx=new AnnotationConfigApplicationContext(AppConfig4.class,AppConfig5.class);//让多个配置Bean起作用,也可以指定包作为扫描
//ApplicationContext ctx=new AnnotationConfigApplicationContext("com.baizhiedu");//以包进行扫描配置Bean,让多个配置B二胺有效
UserDAO userDAO=(UserDAO) ctx.getBean("userDAO");
userDAO.save();
}
//用于测试多配制Bean的整合
@Test
public void test5(){
ApplicationContext ctx=new AnnotationConfigApplicationContext("com.baizhiedu.config");
UserDAO userDAO =(UserDAO) ctx.getBean("userDAO");
UserService userService =(UserService) ctx.getBean("userService");
System.out.println("userDAO="+userDAO);
System.out.println("userService="+userService);
}
//用于测试多配制Bean的整合 @Import注解
@Test
public void test6(){
ApplicationContext ctx=new AnnotationConfigApplicationContext(com.baizhiedu.config.AppConfig1.class);
UserDAO userDAO =(UserDAO) ctx.getBean("userDAO");
UserService userService =(UserService) ctx.getBean("userService");
System.out.println("userDAO="+userDAO);
System.out.println("userService="+userService);
}
}
test5:包扫描整合
test6:@Import注解整合