Spring基于注解的方式配置

使用注解定义Bean

    Spring从2.0开始基于注解的方式进行配置,在3.0时得到了进一步的完善。Srping容器成功启动的三大要件分别是:Bean定义的信息,Bean实现类已经Spring本身。如果采用XML方式来配置的话,Bean定义信息和Bean实现类本身是分离的,而采用注解的方式配置的话,Bean定义的信息即通过在Bean实现类上标注的注解实现。

     @Component  放在一个类前边,他可以被Spring识别,Spring容器会自动将POJO转换为容器管理的Bean.他和XML配置是等效的:<bean id = "UserDao"  class= "com.test...."> 

下面有几个和这个等效,但是有微小差别:

     @Repository :用于Dao层实现类进行标注。

     @Service:   用于Service层实现类进行标注。

     @Controller: 用于对Controller实现类进行标注

 

使用注解配置信息启动Spring容器

Spring 2.5x以后,提供了一个Context的命名空间,它提供了通过扫描类包以应用注解的方式定义Bean

<?xml version="1.0" encoding="UTF-8"?>
<!-- 1.声明context的命名空间 -->
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
    http://www.springframework.org/schema/beans/spring-beans-3.1.xsd 
     http://www.springframework.org/schema/context             
      http://www.springframework.org/schema/context/spring-context-3.1.xsd
">

    <!-- 2. 扫描类包以应用注解定义的Bean -->
    <context:component-scan base-package="visoup,visoup.common,visoup.framework" />
</beans>

context命名空间的component-scan的base-package属性指定了一个要扫描的类包,spring容器会扫描这个类包所有的类,并且从类的注解中获取Bean的定义信息

如果仅仅希望扫描特定的类包,而非基类包的所有的类,那么使用resource-pattern="anno/*.class"这样则会扫描类包下的anno类包下的所有的类。

 

自动装配Bean

      使用@Autowired进行自动注入

//  1、定义了一个Bean
@Component
public class LoadSystemData {

    //2、注入baseDao
    @Autowired
    private BaseDAO baseDAO;

 在1处将LoadSystemData 标注为一个Bean,在2处通过@Autowired注入到baseDao的Bean。@Autowired默认是按照类型匹配的方式,在容器查找匹配的Bean,当有且仅又一个匹配的时候,Spring将其注入到@Autowired的标注变量中。

     使用@Autowired的required的属性

如果容器中没有标注一个和标注变量类型匹配的时候,Spring容器将会报NoSuchBeanDefinitionException的异常。如果希望Spring容器即使找不到匹配的Bean完成注入也不要抛出异常,那么可以使用@Autowired(required=false)进行标注。

有的时候按类型注入得时候,Spring容器里边可能有多个对象,那么使用下边的方法

     使用@Qualifier指定注入Bean的名称

@Qualifier("userDao"),这时,假设容器有两个类型为UserDao的Bean,一个名字为userDao,另一个名为otherUserDao,那么则会注入名字为userDao的Bean

 

@Resource  @Inject  @Autowired区别

@Resource 是按照名称进行注入的  使用@Autowired@Qualifier("userDao")即可完成这一操作

@Inject 是按照类型进行注入的  但是没有(required=false)这个属性

@Autowired开发中还是很常用的

 

基于xml、基于注解、基于java类  的方式的使用

  1. Bean的实现类来源于三方类库、比如DataSource、JdbcTemplate等,无法在类中进行标注注入,通过xml方式比较好;
  2. 命名空间的配置,如aop、context,只能采用xml进行配置
  3. Bean的实现类是基于当前项目开发的,使用注解方式比较好
  4. 基于java类配置的,一般用于实例化 Bean类比较复杂的,控制Bean初始化的整体逻辑 

 

 

 

 

 

 

 

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值