各种注解的应用
@Autowired用在字段上 或者用在对应的setter方法上 也可以(既会返回字段的注解 也会返回方法的注解 )
@Autowired注解是按 类型装配 对象 该注解有一个required属性 ,该属性取值为true或false
true表示字段是必须要装配的 如果在spring容器中没有找到对应的bean 则抛出异常
false 表示字段不是必须要装配的 如果在spring容器中能找到 则装配 如果找不到 则装配为null
@Autowired自动装配既可以在注解的组件中装配 也可以在xml中配置的组件中装配 (即在xml和包中找 )
@Autowired的作用是
自动装配,自动根据属性的类型,在spring ioc容器所有资源中找对应类型的bean!
1. applicationContext.xml中找
2. 扫描的包下找
决定能不能找到匹配的bean的必要条件:
1. 类型要与Car一致
2. 要被spring容器管理
结果:
找不见:
且@Autowired(required = true)时,就报错
且@Autowired(required = false)时,就不报错,不注入了!
@Autowired注解
找见2个类型与Car一致的
--> xml中有, 扫描的包中也有, 最终用扫描包中的那个
--> xml中2个。报错
=========================================================================================================
@Resource的作用是
1. 先按照被@Resource注解的属性名称来装配,如果找不见指定的名称,就进入第二部
2. @Resource就变得跟@Autowired一样了!
思考,如果按照名称找见了,
且找见了2个名称匹配的bean,一个在xml中,一个在被扫描的包中,最终使用xml中的
=========================================================================================================
@Resource注解和@Autowired一样,也可以标注在字段或属性的setter方法上,但他默认按名称装配,如果
按名称装配找不到对象,@Resource注解就会按类型装配 ,但如果有多个匹配的类型就会报错。例子如下:
c是名称(先导xml里面找) Car是类型(再到类里面找)如果名称找得到就不按类型找,
@Resource注解
============================================================================================================
@Componet 加这个注解 是让容器进行管理
@Aspect 加这个注解 告诉容器 他不仅仅是一个普通组件 它是一个切面
@Before 前置通知
@After后置通知(value="execution(* * .* (..))")第一个*表示任何访问修饰符 任何返回值类型 第二个* 表示 任意包中的任意类 第三个*表示 任意方法 两个点表示任意参数
=================================================================================================================
让容器管理 用
@Repository (放到类放到类上面 业务层用 )
@Autowired (按类型装配 它先在xml里面找 )
业务层管理事务(例子 银行转账 钱不够会自动回滚)
开业务 回滚业务 提交事务(属于横切关注点 )
核心业务是转账功能(核心业务关注点)
当一个业务有许多需求的时候 就要加切面 简化代码的冗余 提高可读性
=================================================================================================================
注解的应用场景
业务层用 @Service
Dao层 用 @Repository
控制层 用@Contrller
分不清的时候用 @Componet
=================================================================================================================
核心业务和横切关注点分离
=================================================================================================================
声明式事务
连切面都不用定 (切面和环绕通知都不用写了 因为进行了封装 )
=================================================================================================================