spring-02_2

11 篇文章 0 订阅
8 篇文章 0 订阅

依赖注入Bean属性(xml)

  • 说白了其实就是给对象的属性赋值
  • 手动装配,使用xml配置
  • 通过构造方法赋值
  • 例1(通过参数名赋值):
			1. 学生类部分代码:
				private String name;
			    private int age;
			    private String address;
			
			    public Student() {
			    }
			
			    public Student(String name, int age, String address) {
			        this.name = name;
			        this.age = age;
			        this.address = address;
			    }
			2. xml配置文件(对属性的设置相当于调用了其传三个参的构造方法)
				<bean id="student1" class="service.models.Student">
		        <!--name是指构造方法中参数的名字-->
		        <constructor-arg name="name" value="zhangsan"></constructor-arg>
		        <constructor-arg name="address" value="wuhan"></constructor-arg>
		        <constructor-arg name="age" value="16"></constructor-arg>
				</bean>
			3. 测试类
				private static void test() {
		        ApplicationContext context = new ClassPathXmlApplicationContext("beans2.xml");
		
		        Student student = (Student) context.getBean("student1");
		        System.out.println(student);
		
		    	}
  • 例2,其实跟上面一样,只是在xml配置文件注入依赖对象的时候通过索引注入:
			xml配置
				<constructor-arg index="0" value="zhangsan" type="java.lang.String"></constructor-arg>
		        <constructor-arg index="2" value="wuhan" type="java.lang.String"></constructor-arg>
		        <constructor-arg index="1" value="16"></constructor-arg>
		    	</bean>
  • 通过setter方式赋值
  • 例1(和上面的只有xml中的不同):
			<bean id="student2" class="service.models.Student">
	        <property name="name" value="fanlei"></property>
	        <property name="address" value="lichuan"></property>
	        <property name="age" value="18"></property>
	    	</bean>
  • 通过P 命名空间赋值(赋值的属性必须要有set方法)
  • 例(xmlns xml namespace 即xml命名空间):
			1. 在beans.xml最上面(就是在beans标签的开始)导入p标签的命名空间
			xmlns:p="http://www.springframework.org/schema/p"
			2. 然后在bean标签内部写上**p:属性=值**就好了
			<bean id="student2_1" class="service.models.Student" p:name="lisi" p:address="sichuan" p:age="20"></bean>
  • SpEL表达式,即spring的el表达式
  • 对进行统一编程,所有的内容都是用value.
  • 格式:
			模板: <property name = "" value = #{表达式}>
			#{123}, #{'abc'}---数字,字符串
			#{beanid}---另一个bean的引用
			#{beanid.propName}---操作对象的某个属性的值
			#{beanid.toString()}---执行方法
			#{T(类).字段|方法}---静态方法或字段
  • 例(用student类为例):
			1. Student类中的属性(都有get和set方法)
				private String name;
			    private int age;
			    private String address;
			    private Color color;
			2. Color类
				public class Color {
			    private String color;
			
			    public String getColor() {
			        return color;
			    }
			
			    public void setColor(String color) {
			        this.color = color;
			    }
			
			    @Override
			    public String toString() {
			        return color;
			    }
				}
			3. xml配置文件
				<!--声明一个color类的对象-->
			    <bean id="colorObject" class="service.models.Color" p:color="黄色">
			    </bean>
			    <!--SpEL表达式-->
			    <bean id="student" class="service.models.Student">
			
			        <!--<property name="name" value="#{'fanlei'}"></property>-->
			        <!--在这里字符串就是一个对象,可以调用方法,快速更改内容赋值-->
			        <property name="name" value="#{'fanlei'.toUpperCase()}"></property>
			
			        <!--调用静态方法/字段给属性赋值-->
			        <property name="age" value="#{T(Math).PI}"></property>
			
			        <!--调用另一个bean的引用,本例是在student类中调用color类的属性color并将其赋值给student类中的color, ref就是引用的意思-->
			        <!--该行代码表示将colorObject这个对象赋值给student的color属性-->
			        <!--<property name="color" ref="colorObject"></property>-->
			        <!--上面的代码等于下面这一句代码-->
			        <property name="color" value="#{colorObject}"></property>
					
					<!--修改对象student的address属性为颜色类的属性color-->
			        <property name="address" value="#{colorObject.color}"></property>
			    </bean>
			4. 测试类
				private static void test() {
			        ApplicationContext context = new ClassPathXmlApplicationContext("beans3.xml");
			
			        Student student = (Student) context.getBean("student");
			        System.out.println(student);
			    }
  • 集合注入
  • 因为我们对象里的属性有可能是集合类型的,所以我们需要知道集合怎么注入的,集合的注入都是给添加子标签
		数组: <array>
		List: <list>
		Set: <set>
		Map: <map>, map存放k/v键值对,使用<entry描述>
		Properties: <props> <prop key = ""></prop>
  • 例1–List(数组,set类似的):
		1. student类(都有get和set方法)
		private String name;
		    private int age;
		    private String address;
		    private Color color;
		    private List<String> books;
		2. xml配置文件
			<bean id="student" class="service.models.Student">
		        <property name="name" value="#{'樊磊'}"></property>
		        <property name="books">
		            <list>
		                <value>语文</value>
		                <value>数学</value>
		                <value>英语</value>
		            </list>
		        </property>
		    </bean>
		3. 测试类
			private static void test() {
		        ApplicationContext context = new ClassPathXmlApplicationContext("beans4.xml");
		
		        Student student = (Student) context.getBean("student");
		        System.out.println(student);
				输出: Student{name='樊磊', age=0, address='null', color=null, books=[语文, 数学, 英语]}
		    }
  • 例2–Map(前面的和上面差不多,我就只给配置文件的了)
			配置文件
				<bean id="student" class="service.models.Student">
			        <property name="name" value="#{'樊磊'}"></property>
			        <property name="books">
			            <map>
			                <entry key="语文" value="必修"></entry>
			                <entry key="数学" value="必修"></entry>
			                <entry key="英语" value="必修"></entry>
			            </map>
			        </property>
			    </bean>
  • 例3–Properties(也只写配置文件)
			<bean id="student" class="service.models.Student">
		        <property name="name" value="#{'樊磊'}"></property>
		        <property name="books">
		            <props>
		                <prop key="语文">最容易</prop>
		                <prop key="数学">最难</prop>
		                <prop key="英语">还可以</prop>
		            </props>
		        </property>
		    </bean>
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值