IOC
- 把对象创建和对象之间的调用过程,交给Spring进行管理
- 使用IOC的目的 : 我了降低耦合度
IOC的底层原理
通过 XML解析,工厂模式,反射 实现了IOC
<bean id="user" class="com.hncj.User"></bean>
- 第二步 在有service类和dao类,创建工厂类
class UserFactory{
public static UserDao getDao(){
String 类路径 =
Class clazz = Class.forName("类路径");
return (UserDao) clazz.newInstance();
}
}
IOC接口
- IOC思想基于IOC容器,IOC容器底层就是对象工厂
- Spring提供IOC容器的两种方式(两个接口 BeanFactory和ApplicationCOntext)
BeanFactory接口
- BeanFactory是Spring内部的使用接口,不提供开发人员使用
-
- 在加载配置文件时不会创建对象,在获取对象才去创建对象
ApplicationContext接口
- 是BeanFactory的子接口,是提供给开发人员使用的
-
-
IOC操作
IOC操作Bean管理
基于XML配置文件方式实现
<bean id="user" class="com.hncj.User"></bean>
- 属性解释:
- id是指 唯一标识
- class是 类全路径(包类路径)
基于XML注入
<bean id="user" class="com.hncj.User">
<property name="name" value="小安"></property>
</bean>
<bean id="User" class="com.hncj.User">
<constructor-arg name="name" value="小红"></constructor-arg>
</bean>
<bean id="User" class="com.hncj.User">
<property name="name">
<null></null>
</property>
</bean>
public interface UserDao {
void update();
}
public class UserDaoImpl implements UserDao{
@Override
public void update() {
System.out.println("user update");
}
}
public class UserService {
private UserDao userDao;
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
public void add(){
userDao.update();
System.out.println("Service add");
}
}
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="userservice" class="com.hncj.service.UserService">
<property name="userDao" ref="userdao"></property>
</bean>
<bean id="userdao" class="com.hncj.dao.UserDaoImpl"></bean>
</beans>
@Test
public void test2(){
ApplicationContext context = new ClassPathXmlApplicationContext("bean2.xml");
UserService userService = context.getBean("userservice",UserService.class);
userService.add();
}
public class Peron {
private String name;
private String age;
private Sex sex;
public Peron(String name, String age, Sex sex) {
this.name = name;
this.age = age;
this.sex = sex;
}
public Peron() {
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
public Sex getSex() {
return sex;
}
public void setSex(Sex sex) {
this.sex = sex;
}
@Override
public String toString() {
return "Peron{" +
"name='" + name + '\'' +
", age='" + age + '\'' +
", sex=" + sex +
'}';
}
}
public class Sex {
private String sex;
public Sex() {
}
@Override
public String toString() {
return "Sex{" +
"sex='" + sex + '\'' +
'}';
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
}
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="person" class="com.hncj.beans.Peron">
<property name="name" value="小王"></property>
<property name="age" value="12"></property>
<property name="sex">
<bean id="sex" class="com.hncj.beans.Sex">
<property name="sex" value="男"></property>
</bean>
</property>
</bean>
</beans>
@Test
public void test3(){
ApplicationContext context = new ClassPathXmlApplicationContext("bean3.xml");
Peron peron = context.getBean("person", Peron.class);
System.out.println(peron);
}