Spring 注解详解

@Controller:控制器(注入服务)---标注在控制层;(标注控制层组件)

@Service:业务逻辑、服务(注入service或dao)---标注于业务层;

@Repository:实现dao的访问(注入dao的实现层impl)---标注于数据访问层,即dao层;(标注数据访问组件,即DAO组件)

 

@Component:把普通的POJO实例化到Spring容器中,相当于配置文件中的<bean  id=""  class="">---不好归类则使用该注解标注;(当组件不好归类的时候,我们可以使用这个注解进行标注。)

 

<bean id="executor" class="com.alipay.ThreadPoolTask">

以上四个注解是将它注解的类纳入Spring容器中管理。

引入component的扫描组件的写法

 

<context:component-scan base-package="com.demo.util"/>

<context:component-scan base-package="com.demo.test"/>

<context:component-scan base-package="com.quartz.redis.test"/>

@Autowired和@Resource的区别:

(1)@Autowired与@Resource都可以用来装配bean.都可以写在字段上,或者写在setter方法上。

(2)@Autowired默认按类型装配(该注解是属于Spring的),默认情况下必须要求依赖对象必须存在,如果要允许null值,可以设置它的required属性为false.(  @Autowired (required=false) ).如果我们想使用名称装配可以结合 @Qualifier 注解进行使用;

注:@Autowired和@Resource使用方面不推荐@Autowired,推荐使用@Resource。

@Autowired:

       @Autowired可以对成员变量、方法和构造函数进行标注来完成自动装配的工作。@Autowired的标注位置不同,它们都会在Spring在初始化这个bean的时候自动装配这个属性。要让@Autowired能够起作用,还要在配置文件中加入xml代码配置如下;

 

<bean class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor"/>

@Qualifier:

        @Autowired是根据类型进行自动装配。如果当Spring上下文中存在多个"channelandcommerce"类型的bean时,就会抛出BeanCreationExceptionyi异常;如果Spring上下文中不存在"channelandcommerce"类型的bean,也会抛出该异常。因此我们可以使用@qualifier来解决这些问题。

例如:

 

@Autowired
public void setGlobalCache(@Qualifier("channelandcommerce") Ehcache channelandcommerce){
    this.channelandcommerce = channelandcommerce;
}

 

@Resource:

        @Resource相当于@Autowired的作用,只是@Autowired默认是byType自动注入,而@Resource默认是byName自动注入。@Resource有两个相当重要的属性name和type;Spring将@Resource的name属性解析为bean的name;type属性解析为bean的type;所以如果使用name属性则使用byName自动注入策略,反之使用type属性则使用byType自动注入策略。如果name属性和type属性都不指定,则将通过反射机制使用buName自动注入。

 

@Resource(name = "shiroPwdEncoder")
private PwdEncoder pwdEncoder;

比如此处使用name属性将"shiroPwdEncoder"这个bean自动注入进去。

@Resource装配顺序:

a.如果同时指定了name和type属性,则从Spring上下文中找到唯一匹配的bean进行装配,找不到则抛异常;

b.如果只是指定了name,则从Spring上下文中找名称(id=“name”)匹配的bean进行装配,找不到则抛异常;

c.如果只是指定了type,则从Spring上下文中找到类型匹配的唯一的bean进行装配,找不到或者找出多个则都要抛异常;

d.如果name和type两个都没有指定,则自动按byName自动注入策略进行装配;

@Scope:

在使用配置文件定义Bean时,我们可能还需要通过bean的scope属性来定义bean的作用范围,此时可以用@Scope注解来完成这个功能:

 

@Scope(proxyMode = ScopedProxyMode.TARGET_CLASS)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值