spring学习第三天_Spring Ioc基于配置方式的属性注入

发布于:2023-01-01 ⋅ 阅读:(364) ⋅ 点赞:(0)

属性注入:如何给对象中的属性设值

1 构造注入

通过构造方法实现属性的注入,第一步需要在实体类中添加对应的有参构造方法,第二步在配置文件中添加对应的配置信息

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"
	xsi:schemaLocation="http://www.springframework.org/schema/beans           http://www.springframework.org/schema/beans/spring-beans.xsd">

          //指定引入的配置文件
		<import resource="applicationContext-*.xml"/>
        
        //constructor-arg  通过构造函数注入
        <bean id="person" class="com.zyz.spring.Person">
        	<constructor-arg name="name" value="maxiaosan"></constructor-arg>
        	<constructor-arg name="age" value="18"></constructor-arg>
        	<constructor-arg name="food" ref="food"></constructor-arg>
        </bean>
      
        
</beans>

applicationContext-service.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="food" class="com.zyz.spring.Food">
        <constructor-arg name="name" value="shuijiao"></constructor-arg>
        </bean>
        通过下标来指定属性赋值
         <bean id="food" class="com.zyz.spring.Food">
        <constructor-arg index="0" value="shuijiao"></constructor-arg>
        </bean>
        
</beans>

Person 实体类要含有有参构造方法

public class Person {

	private String name;
	private int age;
	private Food food;
	
	
	public Person(String name, int age, Food food) {
		super();
		this.name = name;
		this.age = age;
		this.food = food;
	}
	
	
	public Food getFood() {
		return food;
	}
	public void setFood(Food food) {
		this.food = food;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}


	@Override
	public String toString() {
		return "Person [name=" + name + ", age=" + age + ", food=" + food.toString() + "]";
	}
	
}

Food

public class Food {

	private String name;

	public Food(String name) {
		super();
		this.name = name;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	@Override
	public String toString() {
		return "Food [name=" + name + "]";
	}
	
}

Test.java

		ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
		Person person = (Person)ctx.getBean("person");
		System.out.println(person.toString());

配置的简化方式: c 名称空间
添加C名称空间
xmlns:c=“http://www.springframework.org/schema/c”

<?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:c="http://www.springframework.org/schema/c"
	xsi:schemaLocation="http://www.springframework.org/schema/beans           http://www.springframework.org/schema/beans/spring-beans.xsd">

        
   
        //具体使用
         <bean class="com.zyz.spring.Food" c:name="niurou"></bean>
        //通过下标来给属性赋值
        <bean class="com.zyz.spring.Food" c:_0="niurou"></bean>
</beans>

Food 要有一个有参构造方法

public class Food {

	private String name;

	public Food(String name) {
		super();
		this.name = name;
	}



	@Override
	public String toString() {
		return "Food [name=" + name + "]";
	}
	
}

Test

		ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
		Food food= (Food)ctx.getBean(Food.class);
		System.out.println(food.toString());

数组和集合注入、 Map和Properties类型注入
创建一个实体类 里边私有属性有list集合 set,map,Properties

public class Person {

	private String name;
	private int age;
	private Food food;
	private Properties gift;
	private List<String> list;
	private Set<String> set;
	private Map<String, String> map;
	private String[] array;
	
	
	
	
	
	public String[] getArray() {
		return array;
	}
	public void setArray(String[] array) {
		this.array = array;
	}
	public List<String> getList() {
		return list;
	}
	public void setList(List<String> list) {
		this.list = list;
	}
	public Set<String> getSet() {
		return set;
	}
	public void setSet(Set<String> set) {
		this.set = set;
	}
	public Map<String, String> getMap() {
		return map;
	}
	public void setMap(Map<String, String> map) {
		this.map = map;
	}
	public Properties getGift() {
		return gift;
	}
	public void setGift(Properties gift) {
		this.gift = gift;
	}
	public Food getFood() {
		return food;
	}
	public void setFood(Food food) {
		this.food = food;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
}

配置文件

<?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">


		<import resource="applicationContext-*.xml"/>
        <!-- 对象属性 Spring 会调起 对象的 set方法  来 DI -->
        <bean id="person" name="human,star" class="com.zyz.spring.Person">
        	<property name="name"><value>张无忌</value></property>
        	<property name="age" value="18" />
        	如果初始化的属性的类型是自定义的对象,那么注入的时候可以通过 ref 属性来从IoC容器中获取合
适的对象注入
        	<property name="food" ref="food" />
        	<property name="list">
        		<array>
        			<value>a</value>
        			<value>b</value>
        			<value>c</value>
        		</array>
        	</property>
        	        	
	
        	<property name="set">
        	
        		<array>
        			<value>a</value>
        			<value>b</value>
        			<value>c</value>
        			<value>c</value>
        		</array>
        	</property>
        	
    		<property name="map">
    			<props>
    				<prop key="a">1</prop>
    				<prop key="b">2</prop>
    			</props>
    			<!-- 
    			<map>
    				<entry key="a" value="1"></entry>
    				<entry key="b" value="2"></entry>
    				<entry key="b" value="2"></entry>
    			</map>
    			 -->
    		</property>
        	
        	
        	<property name="gift">
	        	<value>
	        	douban=http://douban.com/movie/xx.html
	        	paoniu=100,
	        	dushu=200
	        	</value>
        	</property>
        </bean>
        
        <bean id="food" class="com.zyz.spring.Food"></bean>
        
        <alias name="person" alias="person2"/>
        
</beans>


Test

	public static void main(String[] args) {
		
		ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
		Person person1 = ctx.getBean("person",Person.class);
		person1.getFood().toString();
		System.out.println(ToStringBuilder.reflectionToString(person1));
	}
本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到