Spring笔记04(DI(给属性赋值),自动装配(autowire))
给不同数据类型注入值:
- <?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-3.2.xsd">
- <bean id="entity" class="entity.TestEntity">
- <!-- 使用<![CDATA[]]>标记处理XML特 殊字符 -->
- <property name="specialCharacter1">
- <value><![CDATA[P&G]]></value>
- </property>
- <!-- 把XML特殊字符替换为实体引用 -->
- <property name="specialCharacter2">
- <value>P&G</value>
- </property>
- <!-- 定义内部Bean -->
- <property name="innerBean">
- <bean class="entity.User">
- <property name="username">
- <value>Mr. Inner</value>
- </property>
- </bean>
- </property>
- <!-- 注入List类型 -->
- <property name="list">
- <list>
- <!-- 定义List中的元素 -->
- <value>足球</value>
- <value>篮球</value>
- </list>
- </property>
- <!-- 注入数组类型 -->
- <property name="array">
- <arry>
- <!-- 定义数组中的元素 -->
- <value>足球</value>
- <value>篮球</value>
- </arry>
- </property>
- <!-- 注入Set类型 -->
- <property name="set">
- <set>
- <!-- 定义Set或数组中的元素 -->
- <value>足球</value>
- <value>篮球</value>
- </set>
- </property>
- <!-- 注入Map类型 -->
- <property name="map">
- <map>
- <!-- 定义Map中的键值对 -->
- <entry>
- <key>
- <value>football</value>
- </key>
- <value>足球</value>
- </entry>
- <entry>
- <key>
- <value>basketball</value>
- </key>
- <value>篮球</value>
- </entry>
- </map>
- </property>
- <!-- 注入Properties类型 -->
- <property name="props">
- <props>
- <!-- 定义Properties中的键值对 -->
- <prop key="football">足球</prop>
- <prop key="basketball">篮球</prop>
- </props>
- </property>
- <!-- 注入空字符串值 -->
- <property name="emptyValue">
- <value></value>
- </property>
- <!-- 注入null值 -->
- <property name="nullValue">
- <null/>
- </property>
- </bean>
- </beans>
1.DI(给属性赋值)的四种方式:
01.Student实体类:
- package cn.pb.bean;
- /**
- * 学生实体类
- */
- public class Student {
- private String name; //姓名
- private Integer age; //年龄
- private Grade grade; //年级
- @Override
- public String toString() {
- return "Student [name=" + name + ", age=" + age + ", grade=" + grade
- + "]";
- }
- // p 注入的时候 必须要有无参构造
- public Student() {
- super();
- }
- // c 注入的时候 必须要有带参构造
- public Student(String name, Integer age, Grade grade) {
- super();
- this.name = name;
- this.age = age;
- this.grade = grade;
- }
- //p注入的时候 必须要有set()
- 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 Grade getGrade() {
- return grade;
- }
- public void setGrade(Grade grade) {
- this.grade = grade;
- }
- }
02.Grade实体类:
- package cn.pb.bean;
- /**
- * 年级实体类
- */
- public class Grade {
- private String name; //年级名称
- @Override
- public String toString() {
- return "Grade [name=" + name + "]";
- }
- public Grade() {
- super();
- }
- public Grade(String name) {
- super();
- this.name = name;
- }
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- }
03.DI注入的方式:
- <?xml version="1.0" encoding="UTF-8"?>
- <beans xmlns="http://www.springframework.org/schema/beans"
- xmlns:p="http://www.springframework.org/schema/p"
- xmlns:c="http://www.springframework.org/schema/c"
- 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-->
- <bean id="grade" class="com.xdf.bean.Grade">
- <!--01.设值注入 (推荐使用,便于阅读) 在对应的类中必须有set方法,因为底层执行反射机制查询类中对应的setXxx(DI) -->
- <property name="gradeId" value="1"/>
- <property name="name" value="一年级"/>
- </bean>
- <!-- 配置学生对应的bean 02.p命名空间赋值 必须有set()和无参构造
- <bean id="student" class="com.xdf.bean.Student"
- p:age="18" p:name="小黑" p:grade-ref="grade"/>-->
- <!--03.通过构造方法给属性赋值 前提是 必须有对应的带参构造方法 不需要set和get,无参构造也不需要
- <bean id="student" class="com.xdf.bean.Student">
- 001:使用参数的下标
- <constructor-arg index="0" value="xiaohei"/>
- <constructor-arg index="1" value="19"/>
- <constructor-arg index="2" ref="grade"/>
- 002:使用参数的名称
- <constructor-arg name="name" value="xiaohei"/>
- <constructor-arg name="age" value="19"/>
- <constructor-arg name="grade" ref="grade"/>
- 003:使用参数的默认顺序
- <constructor-arg value="xiaohei"/>
- <constructor-arg value="19"/>
- <constructor-arg ref="grade"/>
- </bean>-->
- <!--04.通过c命名空间(构造方法)给属性赋值 前提是 必须有对应的带参构造方法-->
- <bean id="student" class="com.xdf.bean.Student"
- c:age="18" c:name="xiaobai" c:grade-ref="grade"/>
- </beans>
04.测试代码:
- package cn.pb;
- import cn.pb.bean.Student;
- import org.junit.Test;
- import org.springframework.context.ApplicationContext;
- import org.springframework.context.support.ClassPathXmlApplicationContext;
- public class StudentTest {
- @Test
- public void test01(){
- ApplicationContext context=
- new ClassPathXmlApplicationContext("applicationContext.xml");
- /*
- * 获取容器给我们创建的Student对象 ioc的体现
- * 本身由自身创建对象的过程,把创建对象的权利移交给了spring容器! IOC 控制反转
- *
- * 之前 Student student=new Student();
- * 现在context.getBean("student");
- * context容器来创建对象了
- *
- */
- Student student=(Student) context.getBean("student");
- System.out.println(student);
- }
- }
2.自动装配(autowire):
01.主人实体类:
- /**
- * 主人类
- */
- public class Person {
- private String name; //姓名
- private int age; //年龄
- private Dog dog; //主人的宠物
- private Cat cat; //主人的宠物
- public Cat getCat() {
- return cat;
- }
- public void setCat(Cat cat) {
- this.cat = cat;
- }
- public Dog getDog() {
- return dog;
- }
- public void setDog(Dog dog) {
- this.dog = dog;
- }
- 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 +
- ", dog=" + dog +
- ", cat=" + cat +
- '}';
- }
- public Person(String name, int age) {
- this.name = name;
- this.age = age;
- }
- public Person() {
- }
- }
02.宠物狗实体类:
- /**
- * 宠物狗类
- */
- public class Dog {
- private String name;
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- @Override
- public String toString() {
- return "Dog{" +
- "name='" + name + '\'' +
- '}';
- }
- }
03.宠物狗的子类小狗实体类:
- /**
*继承了宠物狗类 所以宠物狗的非私有的东西 他全有
*/
public class SmallDog extends Dog {- }
04.宠物猫实体类:
- /**
- * 小猫咪类
- */
- public class Cat {
- private String name;
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- @Override
- public String toString() {
- return "Dog{" +
- "name='" + name + '\'' +
- '}';
- }
- }
05.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">
- <!-- autowire 自动装配对象 有两种方式
- 01.byName
- spring会根据实体类中的属性名,去找xml文件中id为属性名的bean进行装配!
- 02.byType
- spring会根据实体类中的属性类型,去找xml文件中找一个class是 属性类型的类进行装配,
- 如果有多个 会报错!
- -->
- <!--配置的主人bean-->
- <bean id="person" class="cn.pb.bean.Person" autowire="byName">
- <property name="age" value="20"/>
- <property name="name" value="xiaohei"/>
- <!--直接引用 autowire属性没有效果 <property name="dog" ref="dog"/>-->
- </bean>
- <!--配置 宠物狗bean-->
- <bean id="dog" class="cn.pb.bean.Dog">
- <property name="name" value="哈士奇"/>
- </bean>
- <!--配置 小狗bean-->
- <bean id="smallDog" class="cn.pb.bean.SmallDog">
- <!--SmallDog中没有任何属性 ,但是继承父类的name-->
- <property name="name" value="小狗哈士奇"/>
- </bean>
- <!--主人的第二个宠物 猫咪-->
- <bean id="cat" class="cn.pb.bean.Cat">
- <property name="name" value="机器锚"/>
- </bean>
- </beans>
06.测试代码:
- public class PersonDemo {
- public static void main(String[] args) {
- ApplicationContext context=new ClassPathXmlApplicationContext
- ("applicationContext.xml");
- //获取主人信息
- Person person = (Person) context.getBean("person");
- System.out.println(person);
- }
- }
Spring笔记04(DI(给属性赋值),自动装配(autowire))的更多相关文章
- Spring笔记(2) - 生命周期/属性赋值/自动装配及部分源码解析
一.生命周期 @Bean自定义初始化和销毁方法 //====xml方式: init-method和destroy-method==== <bean id="person" c ...
- spring(四):spring中给bean的属性赋值
spring中给bean的属性赋值 xml文件properties标签设置 <bean id="student" class="com.enjoy.study.ca ...
- Spring Bean 注入 1 - 构造方法注入,属性注入,自动装配
1.代码结构图 xxx 2.bean代码 package com.xxx.bean; /** * Created with IntelliJ IDEA. * User: zhenwei.liu * D ...
- Spring学习记录(三)---bean自动装配autowire
Spring IoC容器可以自动装配(autowire)相互协作bean之间的关联关系,少写几个ref autowire: no ---默认情况,不自动装配,通过ref手动引用 byName---根据 ...
- Spring点滴十:Spring自动装配(Autowire)
在基于XML配置元数据,在bean的配置信息中我们可以使用<constructor-arg/>和<property/>属性来实现Spring的依赖注入.Spring 容器也可以 ...
- Spring学习七----------Bean的配置之自动装配
© 版权声明:本文为博主原创文章,转载请注明出处 Bean的自动装配(Autowiring) no:不启用自动装配,此时需要手动注入.参考:Spring学习三----------注入方式 defaul ...
- Spring(二)scope、集合注入、自动装配、生命周期
原文链接:http://www.orlion.ga/189/ 一.scope bean的scope属性中常用的有两种:singleton(单例,默认)和prototype(原型,每次创建新对象) 例: ...
- 大厂面试官问你META-INF/spring.factories要怎么实现自动扫描、自动装配?
大厂面试官问你META-INF/spring.factories要怎么实现自动扫描.自动装配? 很多程序员想面试进互联网大厂,但是也有很多人不知道进入大厂需要具备哪些条件,以及面试官会问哪些问题, ...
- Spring注解 - 生命周期、属性赋值、自动装配
一.Bean的生命周期 流程 Bean创建 -- 初始化 -- 销毁 创建: 单实例:在容器启动时创建对象 多实例:每次调用时创建对象 初始化: 都是在对象创建完成后,调用初始化方法 销毁: 单实例: ...
随机推荐
- IE67实现inline-block布局
inline-block可以定义元素为行内块级元素,即既具有行内元素同占一行的特点,又具有块级元素的box模型.但是IE67和其他浏览器的支持差别比较大: 1.行内元素使用inline-block变成 ...
- eeplat开发平台概念理解
近期在学习eeplat的开发.发现其中有非常多概念实在让人easy忘记,所以谨以此文记录一笔. eeplat的开发文档里说eeplat是元数据驱动的,这个元数据什么意思.在我理解就是后台的数据库里面的 ...
- swift菜鸟入门视频教程-05-控制流
本人自己录制的swift菜鸟入门.欢迎大家拍砖.有什么问题能够在这里留言. 主要内容: For 循环 While 循环 条件语句 控制转移语句(Control Transfer Statements) ...
- BCG菜单button的简单使用
一,新建一个BCGprojectCBCGPMenuButton,基于对话框. 二.添加一个button,并关联一个CButton类型的变量m_btn1.然后手动将类型改CBCGPMenuButton成 ...
- glob (programming) and spool (/var/spool)
http://en.wikipedia.org/wiki/Glob_(programming) In computer programming, in particular in a Unix-lik ...
- wifi认证Portal开发系列(一):Radius与FreeRadius简介
RADIUS 维基百科上的介绍: Remote Authentication Dial-In User Service (RADIUS) is a networking protocol that p ...
- CI去掉 URL 中的 index.php
首先,你要清楚自己的 Web 服务器是 Apache,支持 mod_rewrite 查找httpd.conf中是否开启了mod_rewrite.so 然后,在 CI 根目录下新建立一个配置文件,命名为 ...
- NuGet管理工具安装
安装完成后VS重启即可
- linux find 根据条件查找文件
版权为个人所有,欢迎转载如转载请说明出处.(东北大亨) http://www.cnblogs.com/northeastTycoon/p/5513231.html 1. 实现说明 按照某一个时间点查找 ...
- 访问一个绝对地址把一个整型数强制转换 (typecast)为一个指针是合法的
在某工程中,要求设置一绝对地址为0x67a9的整型变量的值为0xaa66.编译器是一个纯粹的ANSI编译器.写代码去完成这一任务. 解析:这一问题测试你是否知道为了访问一个绝对地址把一个整型数强制转换 ...