还是通过分析第一个Spring程序来展开说说Spring工厂的简单原理
首先创建实体类
package com.baizhiedu.basic;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import java.util.Set;
// new Person() 通过工厂
public class Person {
private Integer id;
private String name;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Person() {
}
@Override
public String toString() {
return "Person{" +
"id=" + id +
", name='" + name + '\'' +
'}';
}
}
然后在Spring配置文件中配置bean(applicationContext.xml)
<bean id="person" class="com.baizhiedu.basic.Person"/>
然后编写测试类
/**
* 用于测试:用于测试Spring的第一个程序
*/
@Test
public void test3() {
//1 获得Spring的工厂
ApplicationContext ctx = new ClassPathXmlApplicationContext("/applicationContext.xml");
//2 通过工厂类 获得 对象
Person person = (Person) ctx.getBean("person");
System.out.println("person = " + person);
}
因为我们是通过测试类使用Spring工厂的,所以我们也从测试类开始进行分析.
Class<?> clazz = Class.forName(class的值);
id的值 = clazz.newInstance();
Class<?> clazz = Class.forName(class的值);
id的值 = clazz.newInstance();
等效于(注意这里使用的是等效)
Account account = new Account()
问题:未来在开发过程中,是不是所有的对象,都会交给Spring??来创建呢?
回答:理论上 是的,但是有特例 :实体对象(entity)是不会交给Spring创建,它是由持久层框架进?创建。
Spring与?志框架进?整合,?志框架就可以在控制台中,输出Spring框架运?过程中的?些
重要的信息。
好处:便于了解Spring框架的运?过程,利于程序的调试
默认
Spring1.2.3早期都是于commons-logging.jar
Spring5.x默认整合的?志框架 logback log4j2
Spring5.x整合log4j
1. 引?log4j jar包
2. 引?log4.properties配置?件
<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>
# resources # resources?件夹根?录下
### ### 配置根
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