• Spring随笔(06)


    1、简单类型和复合类型的setter注入

      DI:Dependency Injection(依赖注入)

      从字面上分析:

      IoC:指将对象的创建权,反转到Spring容器

      DI:指Spring容器创建对象的过程中,将对象依赖属性通过配置进行注入

      其实它们是同一个概念的不同角度描述。DI相对IoC而言,明确描述了“被注入对象依赖IoC容器配置依赖对象”。

      

      1)怎么注入值:

        方式1:属性注入,通过setter方法;

        方式2:构造器注入,通过构造器;

      2)注入的方式:

        手动装配:

          基于XML:

          基于注解:

        自动装配:不安全,不推荐

      3)注入哪些类型的值:

        ①简单值类型:基本类型+String+URL等

        ②复合类型(对象类型):

        ③集合类型(了解,框架内部使用)

    2、集合类型的setter注入

    Java类:

    public class Employee{
        private String name;
        private Integer age;
        private Double salary;
        private URL url;
    
        // 省略getter、setter方法          
    }
    public class EmployeeService{
        private EmployeeDao employeeDao;
        
        public void setEmployeeDao(EmployeeDao employeeDao){
            employeeDao = employeeDao;
        }
    
        public void save(){
            employeeDao.save();
         System.out.println("Service.save()") } }
    public class EmployeeeDao{
        public void save(){
            System.out.println("Dao.save()")
        }
    }
    public class CollectionBean {
        private Set<String> set;
        private List<String> list;
        private String[] array;
        private Map<String,String> map;
        private Properties prop;
        
        // 省略getter、setter   
    }

    配置文件:

    <!-- ①简单值类型:基本类型+String+URL等 -->
    <bean id="employee" class="Employee全限定名">
        <property name="name" value="John"/>
        <property name="age" value="20"/>
        <property name="salary" value="5000"/>
        <property name="url" value="http://www.baidu.com"/>
    </bean>
    
    <!-- ②复合类型 -->
    <bean id="employeeDao" class="EmployeeDao全限定名"/>
    <bean id="employeeService" class="EmployeeService全限定名">
        <property name="employeeDao" ref="employeeDao"/>
    </bean>
    
    <!-- ③集合类型(了解,内部框架使用) -->
    <bean id="collectionBean" class="CollectionBean全限定名">
        <!-- Set集合 -->
        <property name="set">
            <set>
                <!-- 引用类型使用<bean> -->
                <value>set1</value>
                <value>set2</value>
            </set>
        </property>
    
        <!-- List集合 -->
        <property name="list">
            <list>
                <!-- 引用类型使用<bean> -->
                <value>list1</value>
           <value>list2</value>
            </list>
        </property>
    
        <!-- 数组类型 -->
        <property name="array">
            <array>
                <!-- 引用类型使用<bean> -->
                <value>array1</value>
           <value>array2</value>
            </array>
        </property>
    
        <!-- Map集合 --> 
        <property name="map">
            <map>
                <entry key="key1" value="value1"/>
                <entry key="key2" value="value2"/>
            </map>
        </property>
    
        <!-- Properties集合 -->
        <property name="prop">
            <props>
                 <prop key="pKey1">pValue1</prop>
                 <prop key="pKey2">pValue2</prop>
            </props>
        </property>
    
    </bean>

    有的时候,若想只有一个bean引用另一个bean,类似于匿名内部类

    <bean id="employeeService" class="EmployeeDao全限定名">
        <property name="employeeDao">
            <bean class="EmployeeDao全限定名"/>
        </property>
    </bean>

    3、构造器注入

    配置文件

    <!-- ①简单值类型:基本类型+String+URL等 -->
    <bean id="employee" class="Employee全限定名">
        <!-- 
            index:表示第几个参数
            type:参数的类型
            name:参数名称
            value:参数的简单类型值
            ref:参数的符合类型值
        -->
        <constructor-arg name="name" value="John"/>
        <constructor-arg name="age" value="20"/>
        <constructor-arg name="salary" value="5000"/>
        <constructor-arg name="url" value="http://www.baidu.com"/>
    </bean>
    
    <!-- ②复合类型 -->
    <bean id="employeeDao" class="EmployeeDao全限定名"/>
    <bean id="employeeService" class="EmployeeService全限定名">
        <constructor-arg name="employeeDao" ref="employeeDao"/>
    </bean>
    
    <!-- ③集合类型(了解,内部框架使用) -->
    <bean id="collectionBean" class="CollectionBean全限定名">
        <!-- Set集合 -->
        <constructor-arg name="set">
            <set>
                <!-- 引用类型使用<bean> -->
                <value>set1</value>
                <value>set2</value>
            </set>
        </constructor-arg>
    
        <!-- List集合 -->
        <constructor-arg name="list">
            <list>
                <!-- 引用类型使用<bean> -->
                <value>list1</value>
           <value>list2</value>
            </list>
        </constructor-arg>
    
        <!-- 数组类型 -->
        <constructor-arg name="array">
            <array>
                <!-- 引用类型使用<bean> -->
                <value>array1</value>
           <value>array2</value>
            </array>
        </constructor-arg>
    
        <!-- Map集合 --> 
        <constructor-arg name="map">
            <map>
                <entry key="key1" value="value1"/>
                <entry key="key2" value="value2"/>
            </map>
        </constructor-arg>
    
        <!-- Properties集合 -->
        <constructor-arg name="prop">
            <props>
                 <prop key="pKey1">pValue1</prop>
                 <prop key="pKey2">pValue2</prop>
            </props>
        </constructor-arg>
    
    </bean>

    Java类:

    public class Employee{
        private String name;
        private Integer age;
        private Double salary;
        private URL url;
    
        // 构造器
        public void Employee(String name,Integer age,Double salary,URL url){
             this.name = name;
             this.age= age;
             this.salary= salary;
             this.url= url;
        }     
    }
    public class EmployeeService{
        private EmployeeDao employeeDao;
        
    // 构造器
    public void EmployeeService(EmployeeDao employeeDao){ this.employeeDao = employeeDao; } public void save(){ employeeDao.save();      System.out.println("Service.save()") } }

    测试类:

    @RunWith(SpringJUnit4ClassRunner.class)
    @ContextConfiguration
    pulic class DITest {
        @Autowired
        private ApplicationContext ctx;
    
        // ①简单值类型
        @Test
        public void testValue() thows Exception {
            System.out.println(ctx.getBean("employee"));
        }
    
        // ② 复合类型
        @Test
        public void testBean() thows Exception {
            EmployeeService service = ctx.getBean("employeeService",EmployeeService.class);
            service.save();
        }
    
        // ③ 集合类型(了解,框架内部使用)
        @Test
        public void tesCollection() thows Exception {
            System.out.println(ctx.getBean("collectionBean"));
        }
    }
  • 相关阅读:
    Linux命令:mapfile
    Linux命令:logout
    行式数据库和列式数据库的浅析
    hadoop常见错误集锦
    hadoop环境搭建遇到问题集锦
    杀毒的一点学习
    powerdesigner的学习
    突然的想法
    shell脚本入门教程(转)
    java classpath深入详解(转)
  • 原文地址:https://www.cnblogs.com/luomsg/p/6420640.html
Copyright © 2020-2023  润新知