反spring容器开发

本文讨论了Spring中构造函数和set方法的注入方式,并指出在大型复杂系统中,过度依赖这些方法可能导致代码职责过于集中,进而引发维护难题。作者呼吁关注如何通过改进注入策略和代码结构,以实现更好的职责分离,提高代码可读性和可维护性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

       在Spring中,容器注入对象的方法主要有两种,分别是构造函数注入方式与set方法注入方式,其中构造函数方法可以根据参数索引,类型和名称来适配。
例子如下:实体类 Student.java

public class Student {
    private String message;

    public void setMessage(String message) {
        this.message = message;
    }
    public Student(){
        System.out.println("Student对象实例化");
    }
    public Student(String name){
        System.out.println("Student对象实例化   name="+name);
    }
    public Student(int i,String name){
        System.out.println("Student对象实例化");
        System.out.println("i="+i+"   name="+name);
    }
    public void printmessage(){
        System.out.println(message);
    }

}

构造函数注入方式:

<!-- 配置要管理的bean 无参构造 -->
        <bean name="stun" id="stu" class="com.java.demo.Student"></bean>
        <!-- 配置一个根据参数值创建bean实例的方式jedis 会用到 -->
        <bean name="stu1" class="com.java.demo.Student">
            <!-- 通过构造函数的类型,名称,索引来适配 -->
            <!-- 通过索引来智能匹配 -->
            <constructor-arg index="0"  value="10"></constructor-arg>
            <constructor-arg index="1"  value="10"></constructor-arg>
        </bean>
        <bean name="stu2" class="com.java.demo.Student">
            
            <!-- 通过类型来智能匹配 -->
            <constructor-arg type="int"  value="12"></constructor-arg>
            <constructor-arg type="String" value="12"></constructor-arg>
        </bean>
        <bean name="stu3" class="com.java.demo.Student">
            
            <!-- 通过名称来智能匹配 -->
            <constructor-arg name="i"  value="13"></constructor-arg>
            <constructor-arg name="name" value="13"></constructor-arg>
        </bean>

通过set方法来注入:对message属性进行赋值 即依靠属性方法来注入

<bean name="stu4" class="com.java.demo.Student">
    <property name="message" value="初始的信息"></property>
</bean>
相信上面的两种方式,不管是xml方式,还是java 文件的配置方式,作为开发的大家已经非常熟悉了。大家日复一日,年复一年的使用这种方法。但是很少有人对这种方式提出质疑,因为在MVC模式的开发中,从controller,service,dao层大家都是这样去用@contrlloer,@service,@resposity配置controller,service,dao。业务逻辑全部堆积在service层,如果对于大型复杂系统来说,这无疑致命的。在service层的方法代码里,有着上万行的代码,各种if esle,各种工具类,各种方法调用方法。对于新增新的需求或者对原有业务逻辑的改造,动一个方法的逻辑,可能造成各种新的bug。为什么会这样,为什么会这样?大家有想过吗?归咎原因,是因为一行代码承担了太多的职责。为了满足一个职责,做的改动,影响了其他职责。就spring容器有解决方案吗?请关注后面文章

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值