Spring学习 Spring常用注解大全
目录
注解
注解的本身是没有功能的,就和 xml 一样。
注解和 xml 都是一种元数据,元数据即解释数据的数据,这就是所谓的配置。
xml和注解的理解
- xml用来管理bean
- 注解只负责完成属性的注入
使用注解的前提★
必须开启注解的支持
?<context:component-scan base-package="com.guo"></context:component-scan>
<context:annotation-config/>
常用注解
1、声明bean的注解
@Component?
表示一个带注释的类是一个“组件”,成为Spring管理的Bean(一般用于把普通pojo实例化到spring容器中)。
@Controller和@Service和@Repository是它的特殊情况。
@Service
在业务逻辑层使用(service层),组合了@Component注解。
@Repository
在数据访问层使用(dao层),组合了@Component注解。
@Controller
用于标注控制层,表示向控制层注入服务层的数据,组合了@Component注解。
2、注入bean的注解
@Autowired
自动按照类型注入。只要容器中有唯一的一个bean对象类型和要注入的变量类型匹配,就可以注入成功。可以作用在变量或者方法上。
@Qualifier
在按照类型注入的基础之上再按照名称注入,它在给类成员注入时要和@Autowired配合使用,但是在给方法参数注入是可以单独使用。
@Resource
属性:name --- 用于指定bean的id。
直接按照bean的id注入,可以独立使用。
以上三种都可以注解在set方法和属性上,推荐注解在属性上(一目了然,少写代码)。
另外以上三个注入都只能注入其他bean类型的数据,而基本类型和String类型无法使用上述注解实现。同时,集合类型的注入只能通过xml来实现。
@Value
用于注入基本类型和String类型的数据。
用法:
1.${}是去找外部配置的参数,将值赋过来
- 例如,
@Value("${db.url}")
将会寻找外部配置文件中的名为db.url
的属性,并将其值注入到对应的属性中。
2.#{}是SpEL表达式(也就是Spring中的el表达式),去寻找对应变量的内容,它可以用于动态计算值,包括对 bean 属性的引用、方法的调用、数学计算等。
- 例如,
@Value("#{systemProperties['java.home']}")
可以使用 SpEL 表达式动态获取系统属性java.home
的值。
3、改变作用范围的注解
@Scope?
用于指定bean的作用范围。
其设置类型包括:
- Singleton (单例,一个Spring容器中只有一个bean实例,默认模式)
- Protetype (每次调用新建一个bean)
- Request (web项目中,给每个http request新建一个bean)
- Session (web项目中,给每个http session新建一个bean)
- GlobalSession(给每一个 global http session新建一个Bean实例)
4、生命周期相关的注解
和在xml配置文件中的<bean>标签中使用init-method和destory-method属性实现的功能一样
@PostConstruct
- 这个注解用于指定一个方法在 bean 初始化完成后立即执行。
- 通常用于执行一些初始化操作,该方法在依赖注入之后、配置之前被调用。
@PreDestroy
- 这个注解用于指定一个方法在 bean 销毁之前执行。
- 通常用于释放资源或执行清理操作。
5、切面(AOP)相关注解
@Aspect
声明一个切面(使用在类上)
使用@After、@Before、@Around定义建言(advice),可直接将拦截规则(切点)作为参数
@After
在方法执行之后执行(使用在方法上)
@Before
在方法执行之前执行(使用在方法上)
@Around
在方法执行之前与之后执行(使用在方法上)
@PointCut
声明切点 在java配置类中使用@EnableAspectJAutoProxy注解开启Spring对AspectJ代理的支持(使用在类上)
6、java配置类相关注解
@Configuration
声明当前类为配置类,相当于xml形式的Spring配置(使用在类上)
@Bean
注解在方法上,声明当前方法的返回值为一个bean,替代xml中的方式(使用在方法上)
@Configuration
声明当前类为配置类,其中内部组合了@Component注解,表明这个类是一个bean(使用在类上)
@ComponentScan
用于对Component进行扫描,相当于xml中的(使用在类上)
@WishlyConfiguration
为@Configuration与@ComponentScan的组合注解,可以替代这两个注解
7、环境切换
@Profile
指定组件在哪个环境的情况下才能被注册到容器中,不指定,任何环境下都能注册这个组件。(使用在类或方法上)
@Conditional
Spring4中可以使用此注解定义条件话的bean,通过实现Condition接口,并重写matches方法,从而决定该bean是否被实例化。(使用在方法上)
8、异步相关
@EnableAsync
配置在类中,通过此注解开启对异步任务的支持,叙事性AsyncConfigurer接口
@Async
在实际执行的bean方法使用该注解来申明其是一个异步任务(方法上或类上所有的方法都将异步,需要@EnableAsync开启异步任务)
9、定时任务相关
@EnableScheduling
在配置类上使用,开启计划任务的支持(类上)
@Scheduled
来申明这是一个任务,包括cron,fixDelay,fixRate等类型(方法上,需先开启计划任务的支持)
10、@Enable*注解说明
这些注解主要用来开启对xxx的支持。
- @EnableAspectJAutoProxy 开启对AspectJ自动代理的支持
- @EnableAsync 开启异步方法的支持
- @EnableScheduling 开启计划任务的支持
- @EnableWebMvc 开启Web MVC的配置支持
- @EnableConfigurationProperties 开启对@ConfigurationProperties注解配置Bean的支持
- @EnableJpaRepositories 开启对SpringData JPA Repository的支持
- @EnableTransactionManagement 开启注解式事务的支持
- @EnableTransactionManagement 开启注解式事务的支持
- @EnableCaching 开启注解式的缓存支持
11、测试相关注解
@RunWith
@RunWith
是 JUnit 框架提供的一个注解,它允许使用不同的运行器来运行测试类。在 Spring 测试中,通常会使用 SpringJUnit4ClassRunner.class
,它是专门用于在测试中启用 Spring 容器支持的 JUnit 运行器。
import org.junit.runner.RunWith;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
@RunWith(SpringJUnit4ClassRunner.class)
public class MySpringTest {
// Test methods
}
@ContextConfiguration
@ContextConfiguration
用于指定 Spring 上下文配置信息,告诉测试类在运行测试时应该加载哪些配置文件或者配置类。它可以指定 XML 配置文件路径或者配置类
import org.springframework.test.context.ContextConfiguration;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:applicationContext.xml")
public class MySpringTest {
// Test methods
}
@ContextConfiguration这个注解通常与@RunWith(SpringJUnit4ClassRunner.class)联合使用用来测试。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!