IOC(概念和原理)
1、什么是IOC
- 控制反转,把对象创建过程和对象之间的调用过程,交给Spring进行管理
- 使用ioc目的:为了耦合度降低
2、IOC底层原理
- xml解析、工厂模式、反射
IOC(BeanFactory接口)
1、IOC思想基于IOC容器完成,IOC容器底层就是对象工厂
2、Spring提供IOC容器实现的两种方式:(两个接口)
BeanFactory:IOC容器基本实现,是Spring内部的使用接口,不提供开发人员进行使用,加载配置文件时不会创建对象,在获取对象才会去创建对象
ApplicationContext:BeanFactory接口的子接口,提供更多更强大的功能,一般由开发人员进行使用
加载配置文件时候就会把在配置文件对象进行创建
3、ApplicationContext接口有实现类

IOC操作Bean管理
1、什么是Bean管理
Bean管理指的是两个操作
Spring创建对象
Spring注入属性
2、Bean管理操作有两种方式
- 基于Xml配置文件的方式实现
- 基于注解方式实现
IOC操作Bean管理(基于xml方式)
1、基于xml方式创建对象
<bean id = "user" class="spring.User"></bean>
id属性:唯一标识
class属性:类全路径
创建对象的时候,默认也是执行无参构造方法完成对象创建
2、基于xml方式注入属性
DI:依赖注入,就是注入属性
第一种注入方式:使用set方法进行注入
创建类,定义属性和对应set方法
public class Book{
private String name;
private String author;
public void setName(String name){
this.name = name;
}
public void setAuthor(String author){
this.author = author;
}
}
2.在Spring配置文件中配置对象创建,配置属性注入
<bean id="book" calss="spring.Book">
<!-- 使用propert完成属性注入
name:类里面的属性
value:向属性注入的值-->
<property name="author" value="达摩老祖"></property>
<property name="name" value="易筋经"></property>
</bean>
第二种注入方式:使用有参数构造方法进行注入
- 创建类,定义属性,创建属性对应有参数构造方法
public class Order{
private String name;
private String address;
public Order(String name, String address) {
this.name = name;
this.address = address;
}
}
- 在spring配置文件中配置
<!-- 构造器注入属性 -->
<bean id="order" class="spring5.Order">
<constructor-arg name="name" value="草莓摇摇奶昔"></constructor-arg>
<constructor-arg name="address" value="河北省石家庄市裕华区"></constructor-arg>
</bean>
## IOC操作Bean管理(xml注入其他类型属性)1、字面量
- null值
<!-- 注入null值-->
<property name="address">
<null/>
</property>
- 属性值包含特殊符号
<!--属性包含特殊符号-->
<![CDATA[]]>
<property name="address">
<value><![CDATA[<<南京>>]]></value>
</property>
2、注入属性-外部bean
- 创建两个类service类和dao类
- 在service调用dao里面的方法
- 在spirng配置文件中进行配置
package spring5.dao;
public interface UserDao {
public void update();
}
package spring5.dao;
public class UserDaoImpl implements UserDao{
@Override
public void update() {
System.out.println("dao update...........");
}
}
package spring5.service;
import spring5.dao.UserDao;
public class UserService {
private UserDao userDao;
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
public void add(){
System.out.println("service add...............");
userDao.update();
}
}
<bean id="userService" class="spring5.service.UserService">
<!-- 注入userDao对象
name属性:类里面属性名称
ref属性:创建userDao对象的bean标签id
-->
<property name="userDao" ref="userDaoImpl"></property>
</bean>
<bean id="userDaoImpl" class="spring5.dao.UserDaoImpl"></bean>
3、注入属性-内部bean
一对多关系:部门和员工
一个部门有多个员工,一个员工属于一个部门
部门是一,员工是多
在实体类之间表示一对多关系,员工表示所属部门,使用对象类型属性进行表示
package spring5.bean;
public class Department {
private String dname;
public void setDname(String dname) {
this.dname = dname;
}
@Override
public String toString() {
return "Department{" +
"dname='" + dname + '\'' +
'}';
}
}
package spring5.bean;
public class Employees {
private String ename;
private String gender;
private Department department;
public void setDepartment(Department department) {
this.department = department;
}
public void setEname(String ename) {
this.ename = ename;
}
public void setGender(String gender) {
this.gender = gender;
}
public void add() {
System.out.println(ename+"::"+gender+"::"+department);
}
}
package spring5.test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import spring5.bean.Employees;
public class TestBean {
public static void main(String[] args) {
new TestBean().testBean();
}
public void testBean(){
ApplicationContext ac = new ClassPathXmlApplicationContext("spring5\\bean2.xml");
Employees employees = ac.getBean("employees", Employees.class);
employees.add();
}
}
<!-- 内部bean -->
<bean id="employees" class="spring5.bean.Employees">
<!--设置两个普通属性-->
<property name="ename" value="lucy"></property>
<property name="gender" value="女"></property>
<!--设置对象类型属性-->
<property name="department" >
<bean id="department" class="spring5.bean.Department">
<property name="dname" value="会计部"></property>
</bean>
</property>
</bean>
版权声明:本文为qq_46519708原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。