第二章、第一个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工厂可以调用对象私有的构造方法创建对象
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