孙哥讲解spring5day 3&day 4 lq

第二章、第一个spring程序

5. 细节分析

  • 名词解释

    Spring工厂创建的对象,叫做bean或者componet
    
  • spring工厂的相关方法

    public class TestSpring {
        @Test
        public void test1() {
            //获得对应的spring工厂对象
            ApplicationContext context = new ClassPathXmlApplicationContext("/applicationContext.xml");
            //通过工厂类获得 具体的bean对象
            Person person = (Person) context.getBean("person");
            System.out.println("person = " + person);
    
            //context.getBean(Person.class) 只能有一个bean 是 Person类型
            Person bean = context.getBean(Person.class);
            Person person1 = context.getBean("person", Person.class);
    
            //getBeanDefinitionNames()  是获得配置文件中所有bean标签的id
            String[] beanDefinitionNames = context.getBeanDefinitionNames();
            for (String beanDefinitionName : beanDefinitionNames) {
                System.out.println("beanDefinitionName = " + beanDefinitionName);
            }
    
            //根据指定的class类型,获得对应的bean标签的id
            String[] beanNamesForType = context.getBeanNamesForType(Person.class);
            for (String s : beanNamesForType) {
                System.out.println("s = " + s);
            }
    
            //用于判断配置文件中是否存在指定id的bean
            boolean person1 = context.containsBeanDefinition("person");
            System.out.println("person1 = " + person1);
            boolean a = context.containsBeanDefinition("a");
            System.out.println("a = " + a);
    
            //用于判断配置文件中是否存在指定id的bean
            boolean person1 = context.containsBean("person");
            System.out.println("person1 = " + person1);
        }
    }
    
  • spring配置文件需要注意的细节

    1. 只配置class属性
    <bean class="com.practice.spring.pojo.Person"/>
    a) 上述配置 是可以通过getBeanDefinitionNames()方法获得id值的
    b) 应用场景: 如果这个bean只需要使用一次 name就可以省略id值
    		   如果这个bean会使用多次,或者被其他bean要引用就需要设置id值(引用必须通过id标识)
    		
    2. name属性
    作用:在spring的配置文件中,是可以为bean对象定义别名
    相同:
    	1. context.getBean("id|name")-->object
    	2. <bean id="" class=""
    		等效
    	   <bean name="" class=""
    区别:
    	1. 别名可以定义多个(用,分隔),但是id属性只能有一个
    	2.代码
    	//用于判断配置文件中是否存在指定id的bean,不能判断name值
            boolean person1 = context.containsBeanDefinition("person");
            System.out.println("person1 = " + person1);
            boolean a = context.containsBeanDefinition("a");
            System.out.println("a = " + a);
    
            //用于判断配置文件中是否存在指定id的bean,也可以判断name值
            boolean person1 = context.containsBean("person");
            System.out.println("person1 = " + person1);
    

6. Spring工厂的底层实现原理(简易版)

spring工厂可以调用对象私有的构造方法创建对象

1631198756270

7. 思考

Q: 在开发过程中,是不是所有的对象都会交由Spring工厂来创建?
A: 理论上是的,但是在实际开发过程中,具体的实体类对象都是由持久层框架来创建的.或者自己new的.spring创建的只是交由ioc容器管理的bean对象

第三章、Spring5.x与日志框架的整合

目的: 日志框架可以在控制台中,输出Spring框架运行过程中的一些重要的信息.
好处: 便于了解Spring框架的运行过程,利于程序的调试
  • spring如何整合日志框架

    Spring5.x 默认整合的日志框架 logback log4j2
    
    Spring5.x 整合log4j
    	1. 引入log4j jar包
    	2. 引入log4.properties配置文件
    
    pom依赖(比较老的版本,根据视频来的)
    	<dependency>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-log4j12</artifactId>
                <version>1.7.25</version>
            </dependency>
    
            <dependency>
                <groupId>log4j</groupId>
                <artifactId>log4j</artifactId>
                <version>1.2.17</version>
            </dependency>
    
    log4j.properties
    ### 配置根
    log4j.rootLogger = debug,console
    
    ### 日志输出到控制台显示
    log4j.appender.console=org.apache.log4j.ConsoleAppender
    log4j.appender.console.Target=System.out
    log4j.appender.console.layout=org.apache.log4j.PatternLayout
    log4j.appender.console.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
    
原文地址:https://www.cnblogs.com/rbwbear/p/15249474.html