目录
注解
xml和注解的理解
使用注解的前提★
常用注解
1、声明bean的注解
@Component
@Service
@Repository
@Controller
2、注入bean的注解
@Autowired
@Qualifier
@Resource
@Value
3、改变作用范围的注解
@Scope
4、生命周期相关的注解
@PostConstruct
@PreDestroy
5、切面(AOP)相关注解
@Aspect
@After
@Before
@Around
@PointCut
6、java配置类相关注解
@Configuration
@Bean
@Configuration
@ComponentScan
@WishlyConfiguration
7、环境切换
@Profile
@Conditional
8、异步相关
@EnableAsync
@Async
9、定时任务相关
@EnableScheduling
@Scheduled
10、@Enable*注解说明
11、测试相关注解
@RunWith
@ContextConfiguration
注解的本身是没有功能的,就和 xml 一样。
注解和 xml 都是一种元数据,元数据即解释数据的数据,这就是所谓的配置。
必须开启注解的支持
表示一个带注释的类是一个“组件”,成为Spring管理的Bean(一般用于把普通pojo实例化到spring容器中)。
@Controller和@Service和@Repository是它的特殊情况。
在业务逻辑层使用(service层),组合了@Component注解。
在数据访问层使用(dao层),组合了@Component注解。
用于标注控制层,表示向控制层注入服务层的数据,组合了@Component注解。
自动按照类型注入。只要容器中有唯一的一个bean对象类型和要注入的变量类型匹配,就可以注入成功。可以作用在变量或者方法上。
在按照类型注入的基础之上再按照名称注入,它在给类成员注入时要和@Autowired配合使用,但是在给方法参数注入是可以单独使用。
属性:name --- 用于指定bean的id。
直接按照bean的id注入,可以独立使用。
以上三种都可以注解在set方法和属性上,推荐注解在属性上(一目了然,少写代码)。
另外以上三个注入都只能注入其他bean类型的数据,而基本类型和String类型无法使用上述注解实现。同时,集合类型的注入只能通过xml来实现。
用于注入基本类型和String类型的数据。
用法:
1.${}是去找外部配置的参数,将值赋过来
@Value("${db.url}")
将会寻找外部配置文件中的名为 db.url
的属性,并将其值注入到对应的属性中。2.#{}是SpEL表达式(也就是Spring中的el表达式),去寻找对应变量的内容,它可以用于动态计算值,包括对 bean 属性的引用、方法的调用、数学计算等。
@Value("#{systemProperties['java.home']}")
可以使用 SpEL 表达式动态获取系统属性 java.home
的值。用于指定bean的作用范围。
其设置类型包括:
和在xml配置文件中的
声明一个切面(使用在类上)
使用@After、@Before、@Around定义建言(advice),可直接将拦截规则(切点)作为参数
在方法执行之后执行(使用在方法上)
在方法执行之前执行(使用在方法上)
在方法执行之前与之后执行(使用在方法上)
声明切点 在java配置类中使用@EnableAspectJAutoProxy注解开启Spring对AspectJ代理的支持(使用在类上)
声明当前类为配置类,相当于xml形式的Spring配置(使用在类上)
注解在方法上,声明当前方法的返回值为一个bean,替代xml中的方式(使用在方法上)
声明当前类为配置类,其中内部组合了@Component注解,表明这个类是一个bean(使用在类上)
用于对Component进行扫描,相当于xml中的(使用在类上)
为@Configuration与@ComponentScan的组合注解,可以替代这两个注解
指定组件在哪个环境的情况下才能被注册到容器中,不指定,任何环境下都能注册这个组件。(使用在类或方法上)
Spring4中可以使用此注解定义条件话的bean,通过实现Condition接口,并重写matches方法,从而决定该bean是否被实例化。(使用在方法上)
配置在类中,通过此注解开启对异步任务的支持,叙事性AsyncConfigurer接口
在实际执行的bean方法使用该注解来申明其是一个异步任务(方法上或类上所有的方法都将异步,需要@EnableAsync开启异步任务)
在配置类上使用,开启计划任务的支持(类上)
来申明这是一个任务,包括cron,fixDelay,fixRate等类型(方法上,需先开启计划任务的支持)
这些注解主要用来开启对xxx的支持。
@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
用于指定 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)联合使用用来测试。