• Spring 属性依赖注入


    1.1    属性依赖注入

    依赖注入方式:手动装配 和 自动装配

    手动装配:一般进行配置信息都采用手动

    基于xml装配:构造方法、setter方法

    基于注解装配:

    自动装配:struts和spring 整合可以自动装配

    byType:按类型装配

    byName:按名称装配

    constructor:构造装配,

    auto: 不确定装配。

    一.构造方法注入

    User.java

    public class User {
    	
    	private Integer uid;
    	private String username;
    	private Integer age;
    	
    	public User(Integer uid, String username) {
    		super();
    		this.uid = uid;
    		this.username = username;
    	}
    	
    	public User(String username, Integer age) {
    		super();
    		this.username = username;
    		this.age = age;
    	}
    }
    

    ApplicationContext.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"
    	xmlns:p="http://www.springframework.org/schema/p"
    	xsi:schemaLocation="http://www.springframework.org/schema/beans 
    	http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
    <!-- 构造方法注入 
    		* <constructor-arg> 用于配置构造方法一个参数argument
    			name :参数的名称
    			value:设置普通数据
    			ref:引用数据,一般是另一个bean id值
    			
    			index :参数的索引号,从0开始 。如果只有索引,匹配到了多个构造方法时,默认使用第一个。
    			type :确定参数类型
    		例如:使用名称name
    			<constructor-arg name="username" value="jack"></constructor-arg>
    			<constructor-arg name="age" value="18"></constructor-arg>
    		例如2:【类型type 和  索引 index】
    			<constructor-arg index="0" type="java.lang.String" value="1"></constructor-arg>
    			<constructor-arg index="1" type="java.lang.Integer" value="2"></constructor-arg>
    	-->
    	<bean id="userId" class="com.itheima.f_xml.a_constructor.User" >
    		<constructor-arg index="0" type="java.lang.String" value="1"></constructor-arg>
    		<constructor-arg index="1" type="java.lang.Integer" value="2"></constructor-arg>
    	</bean>
    </beans>
    

    二.property属性注入

    User.java

    package com.zk.myspring;
    
    public class User {
    	private Integer uid;
    	private String username;
    	private Integer age;
    	
    	public Integer getUid() {
    		return uid;
    	}
    	public void setUid(Integer uid) {
    		this.uid = uid;
    	}
    	public String getUsername() {
    		return username;
    	}
    	public void setUsername(String username) {
    		this.username = username;
    	}
    	public Integer getAge() {
    		return age;
    	}
    	public void setAge(Integer age) {
    		this.age = age;
    	}
    	@Override
    	public String toString() {
    		return "User [uid=" + uid + ", username=" + username + ", age=" + age
    				+ "]";
    	}
    	public User(Integer uid, String username, Integer age) {
    		super();
    		this.uid = uid;
    		this.username = username;
    		this.age = age;
    	}
    	public User() {
    		super();
    	}
    
    }
    

    Test.java

    package com.zk.myspring;
    
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    
    public class Test {
    	public static void main(String[]args)
    	{
    		String path="/com/zk/myspring/ApplicationContext.xml";
    		ApplicationContext ac=new ClassPathXmlApplicationContext(path);
    		
    		User user=(User) ac.getBean("UserId");
    		System.out.println(user);
    	}
    }
    

    ApplicationContext.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"
    	xmlns:p="http://www.springframework.org/schema/p"
    	xsi:schemaLocation="http://www.springframework.org/schema/beans 
    	http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
    <bean id="UserId" class="com.zk.myspring.User">
    <!-- 
    setter方法注入:
    普通数据:
    <property name="" value="值">
    等效
    <property name="">
    <value>
    值
    </value>
    </property>
    引用数据
    <property name="" ref="另一个bean">
    </property>
    等效
    <property name="">
    <ref bean="" />
    </property>
     -->
    
    <property name="username" value="jack"></property>
    <property name="uid" value="1"></property>
    <property name="age" value="24"></property>
    <!-- p命名空间,对setter方法注入进行简化,替换<property name="属性名">,而是在<bean 属性名="普通值"> -->
    </bean>
    </beans>
    

    ApplicationContext的p命名空间

    <?xml version="1.0" encoding="UTF-8"?>
    <beans
    	xmlns="http://www.springframework.org/schema/beans"
    	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    	xmlns:p="http://www.springframework.org/schema/p"
    	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
    <bean id="UserId" class="com.zk.myspring.User" p:uid="1" p:age="24" p:username="zk" p:company-ref="company1"></bean>
    <bean id="company1" class="com.zk.myspring.Company" p:name="computer science" p:address="徐州市中国矿业大学计算机科学与技术学院">
    </bean>
    </beans>
    

    三.集合属性注入

    CollData.java

    package com.zk.myspringcoll;
    
    import java.util.Arrays;
    import java.util.List;
    import java.util.Map;
    import java.util.Properties;
    import java.util.Set;
    
    public class CollData {
    	private String[] arrayData;
    	private List<String> listData;
    	private Set<String> setData;
    	private Map<String,String> mapData;
    	private Properties propersData;
    	public String[] getArrayData() {
    		return arrayData;
    	}
    	public void setArrayData(String[] arrayData) {
    		this.arrayData = arrayData;
    	}
    	public List<String> getListData() {
    		return listData;
    	}
    	public void setListData(List<String> listData) {
    		this.listData = listData;
    	}
    	public Set<String> getSetData() {
    		return setData;
    	}
    	public void setSetData(Set<String> setData) {
    		this.setData = setData;
    	}
    	public Map<String, String> getMapData() {
    		return mapData;
    	}
    	public void setMapData(Map<String, String> mapData) {
    		this.mapData = mapData;
    	}
    	
    	public Properties getPropersData() {
    		return propersData;
    	}
    	public void setPropersData(Properties propersData) {
    		this.propersData = propersData;
    	}
    	@Override
    	public String toString() {
    		return "CollData [arrayData=" + Arrays.toString(arrayData)
    				+ ", 
    listData=" + listData + ", 
    setData=" + setData
    				+ ", 
    mapData=" + mapData + ", 
    properties=" + propersData + "]";
    	}
    	
    	
    }
    

    Test.java

    package com.zk.myspringcoll;
    
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    
    public class TestColl {
    	public static void main(String[]args)
    	{
    		ApplicationContext ac=new ClassPathXmlApplicationContext("applicationContext.xml");
    		CollData colldata=(CollData) ac.getBean("CollData");
    		
    		System.out.println(colldata);
    	}
    }
    

    ApplicationContext.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"
    	xmlns:p="http://www.springframework.org/schema/p"
    	xsi:schemaLocation="http://www.springframework.org/schema/beans 
    	http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
    
    <!-- 
    集合注入都是给<property>添加子标签
    数组:<array>
    List:<List>
    Set:<set>
    Map:<map>
    Properties:<props><prop key="">value</prop></props>
    
    普通数据:<value>
    引用数据:<ref>
     -->
    <bean id="CollData" class="com.zk.myspringcoll.CollData">
    <property name="arrayData">
    <array>
    <value>DS</value>
    <value>DZD</value>
    <value>屌丝</value>
    <value>吊中吊</value>
    </array>
    </property>
    <property name="listData">
    <list>
    <value>list1</value>
    <value>list2</value>
    <value>list3</value>
    <value>list4</value>
    <value>list5</value>
    </list>
    </property>
    <property name="setData">
    <set>
    <value>set1</value>
    <value>set2</value>
    <value>set3</value>
    <value>set4</value>
    <value>set5</value>
    </set>
    </property>
    <property name="mapData">
    <map>
    <entry key="1" value="value1"></entry>
    <entry key="2" value="value2"></entry>
    <entry key="3" value="value3"></entry>
    <entry key="4" value="value4"></entry>
    <entry key="5" value="value5"></entry>
    <!--
    <entry>  
    <key><value>6</value></key>
    <value>value6</value>
    </entry>
    -->
    </map>
    </property>
    
    <property name="propersData">
    <props>
    <prop key="高富帅">嫐</prop>
    <prop key="白富美">嬲</prop>
    <prop key="屌丝">挊</prop>
    </props>
    </property>
    </bean>
    </beans>
    

     四.自动装配bean

    <?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-2.5.xsd">
        <!-- 自动装配(用的不多):  
             byName按名称自动匹配(即要装配的bean中的属性名称和配置中的bean名称相同就会自动装配,如UserService类中的属性和userDAO的bean名称相同就自动装配)  
             byType按类型自动匹配 (即要装配的bean中的属性类型和配置中的bean的类型相同就会自动装配,如UserService类中的属性类型和userDAO的bean类型相同就自动装配)
        -->
        <bean id="user" class="com.zk.myspring.User" autowire="default">
        </bean>
    
    </beans>

    自动装配-byName

    employee.java

    package com.zk.company;
    
    public class employee {
    	private String name;
    	private Integer age;
    	private Double Salary;
    	public String getName() {
    		return name;
    	}
    	public void setName(String name) {
    		this.name = name;
    	}
    	public Integer getAge() {
    		return age;
    	}
    	public void setAge(Integer age) {
    		this.age = age;
    	}
    	public Double getSalary() {
    		return Salary;
    	}
    	public void setSalary(Double salary) {
    		Salary = salary;
    	}
    	@Override
    	public String toString() {
    		return "employee [name=" + name + ", age=" + age + ", Salary=" + Salary
    				+ "]";
    	}
    }
    

     employer.java

    package com.zk.company;
    
    public class employer {
    	private String name;
    	private employee e1;
    	public String getName() {
    		return name;
    	}
    	public void setName(String name) {
    		this.name = name;
    	}
    	public employee getE1() {
    		return e1;
    	}
    	public void setE1(employee e1) {
    		this.e1 = e1;
    	}
    	@Override
    	public String toString() {
    		return "老板"+name +  "给员工" + e1.getName() + "发"+ e1.getSalary() + "的薪水";
    	}
    	
    	
    }
    

    ApplicationContext.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"
    	xmlns:p="http://www.springframework.org/schema/p"
    	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
    
    <bean id="e1" class="com.zk.company.employee">
    <property name="name" value="Tom"></property>
    <property name="age" value="24"></property>
    <property name="salary" value="100000000000000000"></property>
    </bean>
    <bean id="employer1" class="com.zk.company.employer" autowire="byName">
    <property name="name" value="Boss"></property>
    </bean>
    </beans>
    

     MainApp.java

    package MainApp;
    
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    
    import com.zk.company.employer;
    
    public class MainApp {
    	public static void main(String[]args)
    	{
    		ApplicationContext ac=new ClassPathXmlApplicationContext("applicationContext.xml");
    		employer er1=(employer) ac.getBean("employer1");
    		System.out.println(er1.toString());
    	}
    }

     运行结果:

    自动装配-byType

    <?xml version="1.0" encoding="UTF-8"?>
    <beans
    	xmlns="http://www.springframework.org/schema/beans"
    	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    	xmlns:p="http://www.springframework.org/schema/p"
    	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
    
    <bean id="e1" class="com.zk.company.employee">
    <property name="name" value="Tom"></property>
    <property name="age" value="24"></property>
    <property name="salary" value="100000000000000000"></property>
    </bean>
    <bean id="employer1" class="com.zk.company.employer" autowire="byType">
    <property name="name" value="Boss"></property>
    </bean>
    </beans>
    

    五.使用注解

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:context="http://www.springframework.org/schema/context"
        xsi:schemaLocation="http://www.springframework.org/schema/beans
               http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
                http://www.springframework.org/schema/context
               http://www.springframework.org/schema/context/spring-context-2.5.xsd">
        <context:annotation-config></context:annotation-config>
    </beans>
    

    六.扫描包名+配合注解

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:context="http://www.springframework.org/schema/context"
        xsi:schemaLocation="http://www.springframework.org/schema/beans
               http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
                http://www.springframework.org/schema/context
               http://www.springframework.org/schema/context/spring-context-2.5.xsd">
        <context:component-scan base-package="com.bjsxt"></context:component-scan>
    </beans>
    

    七.内部Bean

    employer.java

    package com.zk.company;
    
    public class employer {
    	private String name;
    	private employee e1;
    	public String getName() {
    		return name;
    	}
    	public void setName(String name) {
    		this.name = name;
    	}
    	public employee getE1() {
    		return e1;
    	}
    	public void setE1(employee e1) {
    		this.e1 = e1;
    	}
    	@Override
    	public String toString() {
    		return "老板"+name +  "给员工" + e1.getName() + "发"+ e1.getSalary() + "的薪水";
    	}
    	
    	
    }
    

    employee.java

    package com.zk.company;
    
    public class employee {
    	private String name;
    	private Integer age;
    	private Double Salary;
    	public String getName() {
    		return name;
    	}
    	public void setName(String name) {
    		this.name = name;
    	}
    	public Integer getAge() {
    		return age;
    	}
    	public void setAge(Integer age) {
    		this.age = age;
    	}
    	public Double getSalary() {
    		return Salary;
    	}
    	public void setSalary(Double salary) {
    		Salary = salary;
    	}
    	@Override
    	public String toString() {
    		return "employee [name=" + name + ", age=" + age + ", Salary=" + Salary
    				+ "]";
    	}
    	
    	
    }
    

    ApplicationContext.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"
    	xmlns:p="http://www.springframework.org/schema/p"
    	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
    
    <bean id="employee1" class="com.zk.company.employee">
    <property name="name" value="Tom"></property>
    <property name="age" value="24"></property>
    <property name="salary" value="100000000000000000"></property>
    </bean>
    <bean id="employer1" class="com.zk.company.employer">
    <property name="name" value="Boss"></property>
    <property name="e1" ref="employee1"></property>
    </bean>
    </beans>
    

    Main.java

    package MainApp;
    
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    
    import com.zk.company.employer;
    
    public class MainApp {
    	public static void main(String[]args)
    	{
    		ApplicationContext ac=new ClassPathXmlApplicationContext("applicationContext.xml");
    		employer er1=(employer) ac.getBean("employer1");
    		System.out.println(er1.toString());
    	}
    } 

    运行结果:

  • 相关阅读:
    [React & Testing] Simulate Event testing
    [React & Testing] Snapshot testings
    [Node & Tests] Intergration tests for Authentication
    [CSS] Build a Fluid Loading Animation in CSS
    [Node & Testing] Intergration Testing with Node Express
    [Node] Stateful Session Management for login, logout and signup
    [Node.js] Serve Static Files with Express
    [JWT] JWT with HS256
    [Redux] Understand Redux Higher Order Reducers
    [Vue + TS] Create your own Decorators in Vue with TypeScript
  • 原文地址:https://www.cnblogs.com/longlyseul/p/10011172.html
Copyright © 2020-2023  润新知