Spring IoC[控制反转]

    xiaoxiao2026-02-06  0

    近段时间正在学习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配置文件 这样降低了程序之间的耦合度

    相关资源:Java仿Spring框架IOC控制反转利用反射简单实现(源码)
    最新回复(0)