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
作用:声明方法为异常通知方法
使用:在异常通知方法上声明
注意:需要在其中声明对应的切点的全限定路径
三、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());
}
}