从Spring2.5开始,通过注解配置bean功能逐渐强大。Spring boot更是把注解配置用到极致,将开发者工作量降至最低。
1. 使用注解的条件新增context约束
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/context ">
开启对注解的支持
<!-- 开启对指定包进行扫描 --> <context:component-scan base-package="com"/> <!-- 开启对注解的支持 --> <context:annotation-config/>
Spring4以后,需要导入aop包。
2 @Component注解@Component把该类在Spring容器中注册成一个bean。
@Value修饰属性,或者set方法,用于注入属性值。
@Component public class User { public String name; @Value("Zuka") public void setName(String name) { this.name = name; } public String getName() { return name; } } 3 衍生的注解@Component有三个衍生注解,用于Spring Web编程中MVC模型分层。
@Repository 持久数据
@Service 服务
@Controller 控制器
这四个注解的本质都一样,都是把类注册成为Spring中的一个bean。
4 作用域@Scope ,用于指定bean是单例还是原型模式。
@Repository @Scope("Singleton") public class UserDao { public String name; @Value("Zuka") public void setName(String name) { this.name = name; } public String getName() { return name; } } 5、@Configuration配置bean
用@Configuration修饰类
@Bean修饰获取bean的方法。
使用纯JAVA代码进行配置,完全不需要xml配置。
Appconfig是Spring的一个子项目,Spring4 以后,成为官方推荐的配置方式。
//@Configuration本身也是@Component,注册成Spring容器中的一个bean。 //@Configuration代表这是一个配置类,等价于applicationContext.xml文件 @Configuration public class appconfig { //@Bean表示将该类注册到Spring容器中,相当于bean标签 //@Bean 修饰的方法名相当于 bean标签中的id属性 //@Bean 修饰的方法返回值相当于bean标签中的class属性 @Bean public User getUser(){ return new User(); } }@Import 用于导入其它配置类,可以将两个配置类融合在一起。
@Configuration @Import(Config2.class) public class Appconfig { @Bean public User getUser(){ return new User(); } } 6、AnnotationConfigApplicationContext获取bean测试类中,要获取bean,通过实例化一个AnnotationConfigApplicationContext类,构造参数为JAVA配置类Appconfig的类名。
public class UserTest extends TestCase { @Test public void test(){ ApplicationContext context=new AnnotationConfigApplicationContext(Appconfig.class); User user=context.getBean("getUser",User.class); System.out.println(user.toString());这种纯JAVA配置的方式,在SpringBoot中随处可见。
7、自动装配bean的注解在xml文件中配置
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans "> <bean/> <bean/> <bean/> <bean/> <bean/> </beans>@Autowired(仅限Spring框架内使用)
默认按照byType方式来装配bean,接着按照byName方式匹配。若无法唯一匹配,使用@Qualifier(value = XXX)来指定。
@Resource(普通JAVA就可使用)
默认按照byName方式来匹配bean属性,其次按照byType方式来装配bean属性,若无法唯一匹配,使用@Resource(name=”XXX”)来指定。
@Nullable :字段标记了这个注解,说明字段可以为null。
8、xml配置和注解配置区别
xml配置和注解配置
xml配置更加灵活,适用于所有的场景,维护简单方便。
注解配置,只针对该类有效,维护起来比较分散。
最佳实践
xml:用来配置所有的bean
注解:用来注入属性值。