Java知识点总结:想看的可以从这里进入
9、spring 3.0新注解
9.1、注解介绍
spring在3.0版本后可以不需要xml配置文件,它可以通过一系列注解,即可完成代替xml的相关的功能(而SpringBoot的就是以这些注解为基础延伸出来的。)
-
@Configuration:指定当前类为一个Spring核心配置类,创建容器时从该类加载注解(此类可代替.xml文件) -
@ComponentScan(“”):指定Spring在初始化容器时要扫描的包(配置包的扫描)
- 替代xml文件中的 <context:component-scan base-package=“com.***”/>
- 如果 () 中不指定路径,则必须和被扫描的类同包,默认是当前包的路径
- 两个参数
- basePackages={“包路径1,包路径2…”},扫描的是指定包下的所有类,优先使用
- basePackageClasses={类1.class,类2.class…},扫描的是指定的类,需要大量重构的项目中使用
-
@Bean(“”):用在方法上,标注将该方法的返回对象储存到IoC容器中,作为一个Bean
- 不设置时方法名相当于xml文件bean标签的id值,()内设置后为设置的值
- 方法的返回值相当于xml文件bean标签的class属性
- 三个属性
- name=“”:名,可指定多个
- initMethod=“”:自定义初始化方法
- destroyMethod=“”:自定义销毁方法
-
@PropertySource(“classpath:文件名”):加载.properties文件中的配置
- 属性
- name:名称
- value:{“classpath:文件名”,…}
- ignoreResourceNotFound:默认为false,如果找不到文件是否忽略,不设置,找不到会抛出异常
- encoding:编码
-
@Import({1.class,2.class,…}):导入其他的配置类 -
@ImportResource({“classpath:applicationContext.xml”,…}):导入xml配置文件 -
@Profile(“”):根据不同的环境注入不同的对象,配置了profile注解时,使用需要选择激活
- dev:开发环境、test:测试环境、master:生产环境
-
@ActiveProfiles(“”):用在测试类上,用来修改当前的环境,配置了 @Profile 时使用 -
@RunWith(SpringJUnit4ClassRunner.class):用在测试类上 -
@ContextConfiguration(locations = {}):与 @RunWith 联合使用用来测试
9.2、使用
9.2.1、使用@Configuration
@Configuration可以用来完全代替XML文件来使用,同时Spring也提供了一个类:AnnotationConfigApplicationContext(ExplainConfiguration.class),来获取核心配置类,来创建 ApplicationContext容器
-
创建核心配置类,用来代替xml文件
@Configuration
@ComponentScan("com.***")
public class ExplainConfiguration {
}
-
使用 AnnotationConfigApplicationContext 获取studetn -
@RunWith和@ContextConfiguration标注测试类,在测试类中获取student
9.2.2、@Bean的使用
@Component、@Controller、@Service、@Repository这些注解都是用在类上的,但有些第三方jar在使用时,是没有在类中加上这些注解的,所以Spring提供了@Bean,它可以用在一个方法上,将方法的返回对象作为一个Bean存放到 IOC容器中 。(@Bean必须用在带@Component注解的类内,否则spring无法获取)
@Configuration
@ComponentScan
public class ExplainConfiguration {
@Bean("student1")
public Student getStudent(){
Student student = new Student();
student.setName("yu");
student.setAge(22);
student.setDog(new Dog("大黄"));
return student;
}
}
9.2.3、@Profile 使用
@Profile注解主要是用来配置开发环境的,软件开发中会用到敏捷开发模式,此时开发人员和测试人员使用不同的环境,Spring通过 @Profile 实现环境的配置。
-
定义两个Bean,分别为开发用,和测试用 @Profile("dev")
@Bean("student2")
public Student devStudent(){
return new Student("开发用",22,new Dog());
}
@Profile("test")
@Bean("student2")
public Student testStudent(){
return new Student("测试用",22,new Dog());
}
-
使用 @ContextConfiguration(classes = ExplainConfiguration.class)
@RunWith(SpringJUnit4ClassRunner.class)
public class AppTest {
@Autowired
private Student student2;
@Test
public void testProfile(){
System.out.println(student2.getName());
}
}
在获取时我们会发现他会报错,意思是找不到相应的Bean对象 原因是当我们配置了Profile时,系统默认为default的,不会开启Profile,所以我们需要在测试类中加上注解使用Profile的注解:
@ActiveProfiles("test")
此时我们修改所用环境,便可以得到不同的实例
|