Spring的常用注解

一、IOC/DI注解

[1]@Component

使用在普通java类上
作用:声明一个类的对象为bean对象,相当于配置了bean标签。
注意:相当于使用的是无参数构造器来创建对象。

[2]@Service

作用: 使用在业务层类上SpringMVC
声明一个类的对象为bean对象,相当于配置了bean标签
使用:在业务层上使用。

[3]@Controller

作用: 使用在控制层类上SpringMVC
声明一个类的对象为bean对象,相当于配置了bean标签
使用:在SpringMVC的控制器类上使用。

[4]@Repository

作用:声明一个类的对象为bean对象,相当于配置了bean标签
使用:在数据库功能类上使用。比如Dao层对象

[5]@Resource

作用:替换在配置文件的依赖注入的。
使用:在有依赖关系的属性上使用,比如A中有B属性,则在B属性上声明,告诉Spring容器对象将B的bean对象注入到A的bean对象中。
注意:此注解是jdk官方的注解,不是Spring的注解,会先按照byName的方式注入,如果没有则按照byType的方式 继续注入,如果都没有则不注入。并且不需要提供get/set方法

[6]@Autowired

作用:和@Resource相同,都是替换依赖注入的配置的。
使用:在需要依赖注入的属性上声明
注意:该注解是Spring官方提供的,默认使用byType.
并且不需要提供get/set方法

[7] @Qualifier

如果根据成员变量名作为id还是找不到bean,可以使用@Qualifier注解明确指定目标bean的id
@Service
public class BookService {
/**
* @Autowired 实现自动注入
* 1、先按类型查找并注入
* 2、如果找到多个,就接着按属性名做为id继续查找并注入
* 3、如果找到多个。但是属性名做为id找不到,可以使用@Qualifier(“bookMapper1”)注解指定id查找并注入
*/
@Autowired
@Qualifier(“bookMapper1”)
private BookMapper bookMapper;

}
该注解还可以在方法上使用
@Autowired
public void setBookDao(@Qualifier(“bookDaoExt1”)BookDao abc) {
System.out.println(abc);
}

[8]@Value

作用:用来替换配置文件中的属性注入的。
使用:在属性上声明,值为${“键名”}
示例: @Value(${“name”})
注意:使用此注解的注入,无需提供get/set方法。

指定扫描包时的过滤内容
使用context:include-filter指定扫描包时要包含的类
使用context:exclude-filter指定扫描包时不包含的类
设置包含的内容
注意:通常需要与use-default-filters属性配合使用才能够达到“仅包含某些组件”这样的效果。即:通过将use-default-filters属性设置为false,
设置排除的内容

类别 示例 说明
annotation com.bjsxt.XxxAnnotation 过滤所有标注了XxxAnnotation的类。这个规则根据目标组件是否标注了指定类型的注解进行过滤
assignable com.bjsxt.BaseXxx 过滤所有BaseXxx类的子类。这个规则根据目标组件是否是指定类型的子类的方式进行过滤。
aspectj com.bjsxt.*Service+ 所有类名是以Service结束的,或这样的类的子类。这个规则根据AspectJ表达式进行过滤。
regex com\.bjsxt\.anno\.* 所有com.bjsxt.anno包下的类。这个规则根据正则表达式匹配到的类名进行过滤。
custom com.bjsxt.XxxTypeFilter 使用XxxTypeFilter类通过编码的方式自定义过滤规则。该类必须实现org.springframework.core.type.filter.TypeFilter接口

二、AOP注解

[8]@pointcut

作用:声明切点
使用:在切点方法上使用

[9]@Aspect

作用:声明该类为通知类
使用:结合@Component在通知类上使用

[10]@Before

作用:声明方法为前置通知方法
使用:在前置通知方法上声明
注意:需要在其中声明对应的切点的全限定路径

[11]@After

作用:声明方法为后置通知方法
使用:在后置通知方法上声明
注意:需要在其中声明对应的切点的全限定路径

[12]@Around

作用:声明方法为环绕通知方法
使用:在环绕通知方法上声明
注意:需要在其中声明对应的切点的全限定路径

[13]@AfterThrowing

作用:声明方法为异常通知方法
使用:在异常通知方法上声明
注意:需要在其中声明对应的切点的全限定路径

注意:
需要在Spring的配置文件中声明AOP注解生效

三、TX注解

[14]@Transactional

作用:替代了声明式事务配置
使用:声明在需要增加事务的业务层方法上
注意:需要进行扫描配置

四、Test注解

[15] Spring的扩展的Junit测试

/**
* Spring扩展了Junit测试。测试的上下文环境中自带Spring容器。

* 我们要获取Spring容器中的bean对象。就跟写一个属性一样方便。
*/
// @ContextConfiguration配置Spring容器
@ContextConfiguration(locations=”classpath:applicationContext.xml”)
// @RunWith配置使用Spring扩展之后的Junit测试运行器
@RunWith(SpringJUnit4ClassRunner.class)
public class SpringJunitTest {
@Autowired
UserService userService;
@Autowired
BookService bookService;
@Test
public void test1() throws Exception {
bookService.save(new Book());
}
}