Spring IoC[控制反转]

来源:互联网 发布:js点击按钮隐藏input 编辑:程序博客网 时间:2024/05/17 08:40

近段时间正在学习spring。对于spring IOC发表一下自己的见解

1 spring IoC

1.1 什么是IoC
控制反转(Inversion of Control,英文缩写为IoC)。主要是用来降低程序之间耦合度的一种方式。

1.2 IoC主要形式
◇依赖查找:容器提供回调接口和上下文条件给组件。组件就必须使用容器提供的API来查找资源和协作对象,容器将调用这些回调方法,从而让应用代码获得相关资源。

◇依赖注入:组件不做定位查询,只提供普通的Java方法让容器去决定依赖关系。容器全权负责的组件的装配,它会把符合依赖关系的对象通过JavaBean属性或者构造函数传递给需要的对象。

    *通过JavaBean属性注射依赖关系的做法称为设值方法注入(Setter Injection);    *将依赖关系作为构造函数参数传入的做法称为构造器注入(Constructor Injection)

1.3 IoC的优缺点

  • 优点
    把对象生成放在xml配置文件中,当我们需要修改某些对象时候,只需要在xml中进行操作,
    降低了程序之间的耦合度。

  • 缺点
    在程序编写时候可能增加步骤。
    通过反射机制影响效率。
    修改类文件后操作比较繁琐。

2 具体小案例

2.1 编写Dao类

public interface UserDao {    public void getUser();}

2.2 编写impl类

public class UserImpl implements UserDao {    private String name;    private String password;    public UserImpl(String name) {        super();        this.name = name;    }    public UserImpl(String name, String password) {        super();        this.name = name;        this.password = password;    }    @Override    public String toString() {        return "username="+name+"   password="+password;    }    @Override    public void getUser() {        System.out.println(toString());    }}

2.3 编写service接口

public interface UserService {    public void showservice();}

2.4 service实现类

public class UserServiceImpl implements UserService {    private UserDao userDao;    public void setUserDao(UserDao userDao) {        this.userDao = userDao;    }    public void showService() {        userDao.getUser();    }}

2.5 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 http://www.springframework.org/schema/beans/spring-beans.xsd">    <!--采用有两个参数的构造方法-->    <bean id="user" class="com.jsu.dao.Impl.UserImpl">        <constructor-arg index="0" value="zhangsan"/>        <constructor-arg index="1" value="123"/>    </bean>    <!--只有一个参数的构造方法-->    <bean id="user1" class="com.jsu.dao.Impl.UserImpl">        <constructor-arg value="张三"/>    </bean>    <bean id="service" class="com.jsu.service.serviceImpl.UserServiceImpl">        <property name="userDao" ref="user1"/>    </bean>    <!--配置别名-->    <alias name="service" alias="sc"/>    <!--id是唯一的 此时name 相当于别名    name 可用空格 逗号 分号 分割    假如没配置id 则获取直接获取name    constructor-arg 当只有一个时候 直接输入value    当有多个时候需要用下标指定    -->    <bean id="users" name="user3" class="com.jsu.dao.Impl.UserImpl">        <constructor-arg value="lisi"/>    </bean></beans>

2.6 测试类

public class SpirngTest {    public static void main(String[] args) {        //解析xml文件        ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");        //获取对象        UserService service = (UserService) context.getBean("service");        service.showService();    }}

2.7 结果

控制台输出:

username=zhangsan   password=123

通过上述案例
我们可以发现本来要在service中创建对象的任务
转交给了xml配置文件
这样降低了程序之间的耦合度

0 0
原创粉丝点击