eSystemXmlApplicationContext("D:/Spring1.xml");
查阅源码可知,ApplicationContext有一个父接口是ListableBeanFactory,ListableBeanFactory的父接口是BeanFactory
BeanFactory是Ioc容器的顶级接口
Spring的IoC容器底层实际上使用了工厂模式。Spring底层的IoC是通过 XML解析+工厂模式+反射机制
实例化对象的时机:当以下代码执行时就会实例化对象
new ClassPathXmlApplicationContext("spring6.xml");
启用Log4j2日志框架
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.19.0</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-slf4j2-impl</artifactId>
<version>2.19.0</version>
</dependency>
- 第二步:在类的根路径下提供log4j2配置文件(文件名固定为log4j2.xml,文件必须被放到类根路径下)
<?xml version="1.0" encoding="UTF-8"?>
<configeration>
<loggers>
<!-- level指定日志级别,从低到高的优先级:
ALL < TRACE < DEBUG < WARN < ERROR < FATAL < OFF
-->
<root level="DEBUG">
<appender-ref ref="spring6log"/>
</root>
</loggers>
<appenders>
<!-- 输出日志信息到控制台 -->
<console name="spring6log" target="SYSTEM_OUT">
<!-- 日志输出的格式 -->
<PatternLayout pattern="%d{yyyy-MM-dd HH:mm} [%t] %-3levle %logger{1024} -%msg%n"/>
</console>
</appenders>
</configeration>
Logger logger = LoggerFactory.getLogger(FirstSpringtest.class);//在哪个类里面就传什么参数
loggee.info("输入你想记录日志的内容")
依赖注入
构造注入
通过调用构造方法来给属性赋值,在bean标签里面添加constructor-arg标签
<!-- 构造注入 通过index指定参数 -->
<!--
index 属性指定参数下标,第一个参数下标是0
ref 属性用于指定注入bean的id
-->
<constructor-arg index="0" ref="userDaoBean"/>
<!-- 构造注入 通过name指定参数 -->
<!-- name属性是参数的名字 -->
<constructor-arg name ref="userDaoBean"/>
<!-- 构造注入 spring自己做类型匹配 -->
<!-- 不指定下标也不指定参数名 -->
<constructor-arg name ref="userDaoBean"/>
set注入
set注入的话,必须提供一个set方法,spring会调用这个set方法,来给userDao赋值。
想要让spring调用对应的set方法,需要配置property标签
<!-- set注入 需要配置property标签 -->
<!--
name属性是 set方法的方法名,去掉set,然后首字母变成小写 Eg: setAbcd()-----abcd
ref 属性用于指定注入bean的id
-->
<!-- set方法起名最好是按照规范,一般借助IDEA自动生成 -->
<proprety name="xxxx" ref="userDaoBean"/>
set注入专题
注入外部Bean
之前的几个例子就是外部注入:
外部bean的特点:bean定义在外面,然后在property标签中通过ref属性引入
注入内部Bean
在Bean标签中嵌套bean标签
<bean id="studentBean" class="com.winter.spring6.bean.studentBean">
<property name="userDao">
<bean class="com.winter.spring6.bean.userBean"/>
</property>
</bean>
注入简单类型
在property标签中 使用value属性给简单类型赋值
<!-- value 属性用于给简单类型赋值 -->
<proprety name="xxxx" value="123"/>
什么是简单类型?
使用IDEA查找Beanutils类,然后找到isSimpleva lueType方法,查看里面的代码可知
- 基本类型
- 包装类
- 枚举类
- 字符串类型
- 数字
- 日期Date
- 时间、时区Temporal
- URI、URL
- 语言local
- Class
简单类型的应用:让spring去管理数据源