Spring-IOC

Spring IOC本质

1、没有使用控制反转思想

public interface UserDao {
    void show();
}
public class UserDaoImpl implements UserDao{

    @Override
    public void show() {
        System.out.println("MySQL数据库");
    }
}

public interface UserService {
    void data();
}
public class UserServiceImpl implements UserService {
    private UserDao userDao = new UserDaoImpl();
    @Override
    public void data() {
        userDao.show();
    }
}

public class MyTest {

    public static void main(String[] args) {
        UserService userService = new UserServiceImpl();
        userService.data();
    }
}

没有使用控制反转,实现类继承接口,service层要使用dao层,就要在service层通过new对象,来获取dao层对象使用。
当业务需要改变是,需要修改代码达到要求。

//    private UserDao userDao = new UserDaoImpl(); 
    private UserDao userDao = new UserOracalDaoImpl();

修改UserServiceImpl才可以。程序的主动权在程序员手上。

2、使用IOC思想

通过set注入方式实现控制反转

public class UserServiceImpl implements UserService {
    private UserDao userDao;

    public UserServiceImpl(UserDao userDao) {
        this.userDao = userDao;
    }

    @Override
    public void data() {
        userDao.show();
    }
}

修改UserServieImpl的构造方法,通过set反方式注入,在使用时,传入,程序被动接收对象。

public class MyTest {

    public static void main(String[] args) {
        UserService userService = new UserServiceImpl(new UserOracalDaoImpl());
        userService.data();
    }
}

这样程序的控制权,就交由用户,只需要用户传入要选择的Dao类型就可以了,不用修改底层UserServcieImpl类的代码,就可以实现控制反转。

由Spring实现IOC

类定义如上,然后再添加Spring配置文件ben.xml

<?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
        https://www.springframework.org/schema/beans/spring-beans.xsd">
        
     <bean id="userDaoImpl" class="com.nick.pojo.UserDaoImpl">
    </bean>
    <bean id="userOracalDaoImpl" class="com.nick.pojo.UserOracalDaoImpl">
    </bean>
    <bean id="userServiceImpl" class="com.nick.pojo.UserServiceImpl">
       <constructor-arg index="0" ref="userDaoImpl"></constructor-arg>
    </bean>
    <bean id="hello" class="com.nick.pojo.Hello">
        <property name="name" value="xioalu"></property>
    </bean>
</beans>

然后在使用对象的时候,不需要new,只需要在容器中取。

public class MyTest {

    public static void main(String[] args) {
        ApplicationContext context = new ClassPathXmlApplicationContext("bean.xml");
        UserService userServiceImpl = (UserService) context.getBean("userServiceImpl");
        userServiceImpl.data();
    }
}

在这里插入图片描述## IOC创建对象的方式

1、默认无参构造方法

2、有参构造方法

1.类型

<bean id="exampleBean" class="examples.ExampleBean">
    <constructor-arg type="int" value="7500000"/>
    <constructor-arg type="java.lang.String" value="42"/>
</bean>

2、下标

<bean id="exampleBean" class="examples.ExampleBean">
    <constructor-arg index="0" value="7500000"/>
    <constructor-arg index="1" value="42"/>
</bean>

3、名字

<bean id="exampleBean" class="examples.ExampleBean">
    <constructor-arg name="years" value="7500000"/>
    <constructor-arg name="ultimateAnswer" value="42"/>
</bean>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值