• Spring04


    Spring04

    1.xml配置的自动注入

    //创建了两个类
    @Setter
    @ToString
    public class People {
        private Grade g;
    }
    
    public class Grade {
    }
    
    //传统方法注入
    <bean id="grade" class="com.aaa.test.Grade"></bean>
    <bean id="p1" class="com.aaa.test.People">
        <property name="g" ref="grade"></property>
    </bean>
    //实际开发中  会有大量的bean
    
        //所以出现了 自动注入
        <bean id="p1" class="com.aaa.test.People" autowire="byType"></bean>
        此时我们使用了autowire="byType"进行自动化配置  
            byType:根据类型注入 
                spring通过检查成员变量的类型 然后在bean中找到相同类型的
                但是如果有多个类型相同的bean就会有问题
            byName:根据名称注入
                spring通过检查成员变量的名字 然后再bean中找到相同id名的
                
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26

    2.根据注解配置

    A 在spring的xml配置中开启注解配置
    
        <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:context="http://www.springframework.org/schema/context"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
                                http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-beans.xsd"
           default-lazy-init="true">
    <!--    开启注解注入-->
        <context:annotation-config></context:annotation-config>
    <!--    包扫描 spring回去扫描配置包下面的类 注解进行自动注入-->
        <context:component-scan base-package="com.aaa.test"></context:component-scan>
        
    </beans>
        
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    @Component
    public class Grade {
    }
    
    @Setter
    @ToString
    @Component
    public class People {
        @Autowired
        private Grade g;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    3.@Component

    @Setter
    @ToString
    @Component
    public class People {
        @Autowired
        private Grade g;
    }
    
    当前注解添加到 类的上边 代表将当前类 注册到spring的核心容器下
        相当于在spring配置文件中配置了一个bean
        <bean class="com.aaa.test.People"></bean>
            将当前类的创建交给spring管理
    而且 可以在注解中添加字符串类型的参数 代表着id
    
           在web项目中 java三层架构 视图层 服务层 数据持久层
            每一层的类都需要交给spring去管理
           但是没有语义化所以延申出来几个有语义化的注解 作用都是一样的
            @Controller 添加到控制层/视图层 表明当前类对象创建获取交给spring核心容器管理
            			一个控制层的类交给spring去管理
            @Service    一个业务层的类交给spring去管理
            @Repository 一个数据持久层的类交给spring去管理
            @Component  除了上述三个层之外的类 如果需要spring管理 可以使用这个注解
            
           底层都是@Component
            
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    4.@Autowired

    @Autowired
        private Grade g;
    
    添加了这个注解相当于 在配置文件中配置了自动注入
        
        
        当自动注入bean的时候 首先根据类型去匹配如果一个都匹配不到,
        则查看是否配置(required = true) 如果没有配置或者配置的是true,就代表必须注入,此时则抛出异常
        如果配置的是false,代表不是必须注入,此时如果找不到就不注入。
        如果正常匹配到一个 ,则按照类型正常注入。
        如果匹配到多个bean的类型都是同一类型。则根据当前变量的名字匹配对应的bean的名字。
        如果匹配到 则进行注入。如果匹配不到 则 抛出异常
        如果配置了@Qualifier("名字") 则根据@Qualifier("名字")的名字匹配对应的bean
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    5.@Resource注解

    @Resource 相当于 @Autowired 都是用来自动注入
        
        @Resource是java自带的
        @Autowired 是spring中的
        
        @Resource装配顺序:
        如果同时指定了name和type,则从spring上下文中找到唯一匹配的bean进行装配,找不到则抛出异常
        如果指定了name,则从上下文中查找名称 (id) 匹配的bean进行装配,找不到则抛出异常  
        如果指定了type,则从上下文中找到类型匹配的唯-bean进行装配,找不到或者找到多个,都会抛出异常
        如果既没有指定name,又没有指定type,则自动按照byName方式进行装配:如果没有匹配(名字没有一样的),则回退为一个原始类(相当于按照类型取查找一个实现类,如果按照类型取查找的实现类有多个 则抛出异常)
        
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    6.注解配置的作用域、懒加载、生命周期

    @Scope作用域
    @Lazy 懒加载
    @Postconstruct 初始化函数
    @PreDestroy 销毁函数    
    
    • 1
    • 2
    • 3
    • 4

    7.配置类完成bean的配置管理

    配置bean的方式
        A xml配置
        B 注解配置
        C 通过配置类
        
        创建一个配置类加上@Configuration注解
        在里边方法中加上一个@Bean注解
        相当于我们配置了一个bean 返回值类型就是数据类型
        对象创建交给我们自己去创建 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    8.Spring中的测试函数

    A 导入测试包
        <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-test</artifactId>
          <version>6.0.7</version>
        </dependency>
    B 在测试类中添加注解
        @RunWith(SpringJUnit4ClassRunner.class)
    	@ContextConfiguration("classpath:spring.xml")
    	public class JavaTest { 
        	
            
        }
    
    
    
    @RunWith(SpringJUnit4ClassRunner.class)
    @ContextConfiguration("classpath:spring.xml")
    public class JavaTest {
        @Autowired
        private ApplicationContext context;
        @Autowired
        private People p1;
    
        @Test
        public void test(){
            People bean = context.getBean(People.class);
            System.out.println(bean);
        }
    
        @Test
        public void test1(){
            System.out.println(p1);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
  • 相关阅读:
    三角定位是什么
    如何利用PowerShell完成的Windows服务器系统安全加固实践和基线检测
    【MATLAB】字体美化和乱码
    docker--redis容器部署及与SpringBoot整合-I
    SDL2 简明教程(二):创建一个空的窗口
    《牛客题霸-算法篇》刷题之NC339 翻转单词
    Windows VSCode 安装C++ 一定可以的 详细版
    mysql中的utf8mb4、utf8mb4_unicode_ci、utf8mb4_general_ci
    企业密码管理器
    js颜色调试器
  • 原文地址:https://blog.csdn.net/g877835148/article/details/132816838