IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> spring 3.0新注解完全取代XML文件 -> 正文阅读

[Java知识库]spring 3.0新注解完全取代XML文件

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文件

    //表示该类是spring核心配置类
    @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的注解:

    //现在使用的是Profile("test")
    @ActiveProfiles("test")
    

    此时我们修改所用环境,便可以得到不同的实例

    在这里插入图片描述

在这里插入图片描述

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-09-15 01:51:23  更:2022-09-15 01:52:31 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 12:50:42-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码