文章目录
IOC容器:
(1)IOC底层原理
1.什么是IOC
(1)控制反转,把对象的创建和对象之间的调用过程,交给Spring进行管理
(2)目的:为了耦合度降低
2.IOC底层原理
(1)xml解析、工厂模式、反射(通过得到你类的字节码文件操作类中的所有内容)
(2)IOC接口(BeanFactory)
1.IOC思想基于IOC容器完成,IOC容器底层就是对象工厂
2.Spring提供了IOC容器实现的两种方式(两个接口)
(1)BeanFactory:IOC容器基本实现,是Spring内部的使用接口,不提供开发人员进行使用
*加载配置文件的时候不会创建对象,在获取对象(使用)才去创建对象
(2)ApplicationContext:BeanFaxtory接口的子接口,提供更多更强大的功能,一般由开发人员进行使用
*加载配置文件的时候就会把配置文件对象进行创建
(3)ApplicationContext接口中的实现类
FileSystemXmlApplicationContext:表示使用盘符路径(例:“C://spring_dome/com/yxm/bean.xml”)
ClassPathXmlApplicationContext:表示使用类路径即src下的xml文件(例:“bean.xml”)
(3)IOC操作 Bean管理
(Bean:是java中的任何一种对象:javabean/service/action/数据源/dao等)
1.什么是Bean管理(指两个操作):
(1)Spring创建对象
(2)Spring注入属性
2.Bean管理操作的两种方式
(1)基于xml配置文件方式实现
1.基于xml方式创建对象
(1)在spring配置文件中,使用bean标签,标签中添加对应属性,实现对象创建
(2)bean标签中的常用属性
*id属性:唯一标识
*class属性:类全路径(包类路径)
*name属性(了解):与id功能相同,且可以添加特殊符号.例:name=“/user”
(3)创建对象时,默认执行无参构造方法完成对象创建
2.基于xml方式注入属性
(1)DI:依赖注入(注入属性):
DI是IOC中的一种具体实现表示依赖注入
(2)第一种注入方式:使用set方法注入
1.创建类,定义属性和对应的set方法
public class Book {
//创建属性
private String bookName;
private String bookAuthor;
//创建set方法
public void setBookName(String bookName) {
this.bookName = bookName;
}
public void setBookAuthor(String bookAuthor) {
this.bookAuthor = bookAuthor;
}
}
2.在spring配置文件中配置对象创建,配置属性注入
<!--1.配置Book对象的创建-->
<!--2.set方法注入属性-->
<bean id="book" class="com.yxm.spring5.Book">
<!--使用property完成属性注入
name:类里面属性的名称
value:向属性注入的值
-->
<property name="bookName" value="西游记"></property>
<property name="bookAuthor" value="吴承恩"></property>
</bean>
(3)第二种注入方式:使用有参构造进行注入
1.创建类,定义属性,创建属性对应的有参构造方法
public class Orders {
private String orderName;
private String address;
public Orders(String orderName, String address) {
this.orderName = orderName;
this.address = address;
}
}
2.在spring配置文件中进行配置
<!--3有参构造注入属性-->
<bean id="orders" class="com.yxm.spring5.Orders">
<!--使用constructor-arg完成属性注入
name:类里面属性的名称
value:向属性注入的值-->
<constructor-arg name="orderName" value="篮球"></constructor-arg>
<constructor-arg name="address" value="济南市"></constructor-arg>
</bean>
(4)p名称空间注入
1.使用p名称空间注入,可以简化基于xml配置方式
第一步添加p名称空间注入在配置文件中
第二步 进行属性注入,在bean标签中操作
<!--简化set方法注入属性-->
<bean id="book" class="com.yxm.spring5.Book" p:bookName="红楼梦" p:bookAuthor="曹雪芹"></bean>
(5)IOC操作 Bean管理(xml注入其他类型属性)
1.字面量:(通过定义直接赋值或通过property,constructor-arg设定的固定值)
(1)null值
<!--null值-->
<property name="address" >
<null/>
</property>
(2)属性值包含特殊符号
<!--属性值包含特殊符号
1.进行转译(<>)
2.把带特殊符号内容写到CDATA中
-->
<property name="address">
<value><![CDATA[<<济南>>]]></value>
</property>
2.注入属性-外部Bean
(1)创建两个类service类和dao类
(2)在service调用dao中的方法
public class UserService {
//创建UserDao类型属性,生成set方法
private UserDao userDao;
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
public void add(){
System.out.println("service add......");
userDao.update();
}
}
(3)在spring配置文件中进行配置
<!--1 service和dao对象创建-->
<bean id="userService" class="com.yxm.spring5.service.UserService">
<!--注入userDao对象
name属性值:类里面的属性名称
ref属性:创建的userDao对象bean标签的id值
-->
<property name="userDao" ref="userDao"></property>
</bean>
<bean id="userDao" class="com.yxm.spring5.dao.UserDaoImpl"></bean>
3.注入属性-内部Bean和级联赋值
(1)一对多关系:部门与员工
一个部门有多个员工,一个员工属于一个部门
部门是一,员工是多
(2)在实体类中表示一对多得关系 员工表示所属部门,使用对象类型属性进行表示
//部门类
public class Dept {
private String deptName;
public void setDeptName(String deptName) {
this.deptName = deptName;
}
}
//员工类
public class Emp {
private String empName;
private String empSex;
//员工属于某一个部门,使用对象形式表示
private Dept dept;
public void setDept(Dept dept) {
this.dept = dept;
}
public void setEmpName(String empName) {
this.empName = empName;
}
public void