p命名空间注入
核心:通过属性注入!
关键是在原有的xml配置文件的头部<beans>标签内添加下面的语句:
xmlns:p="http://www.springframework.org/schema/p"
1、编写3个实体类
这里只介绍三种实体类的基本属性,需要自己实现getter和setter方法以及无参和有参构造。
User
对象名 | User |
属性1 | name(String) |
属性2 | age(int) |
Address
对象名 | Address |
属性1 | name(String) |
Student
对象名 | Student |
属性1 | name(String) |
属性2 | age(int) |
属性3 | address(Address) |
2、编写配置文件
配置文件的文件名随意。
<?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.xsd"> <!--p命名空间注入--> <bean id="user" class="com.study.pojo.User" p:name="燕双鹰" p:age="25"/> <!--set注入--> <bean id="address" class="com.study.pojo.Address"> <!-- name对应Javabean中的属性名 --> <property name="address" value="山西晋中"/> </bean> <!-- p命名空间注入 --> <bean id="student" class="com.study.pojo.Student" p:name="李大喜" p:age="18" p:address-ref="address"/> </beans>
3、测试
@Test public void test(){ ApplicationContext context = new ClassPathXmlApplicationContext("userbeans.xml"); System.out.println("========普通类型==========="); //User user = (User) context.getBean("user"); User user = context.getBean("user", User.class); //指定反射的对象类型 不用强制转换 System.out.println(user.toString()); System.out.println("========复杂类型==========="); Address address = context.getBean("address", Address.class); address.setAddress("湖北恩施");//通过set方法修改student对象属性的值 Student student = context.getBean("student",Student.class); System.out.println(student); }
运行结果:
========普通类型=========== User{name='燕双鹰', age=25} ========复杂类型=========== Student{name='李大喜', age=18, address=Address{address='湖北恩施'}}
c命空间注入
核心:通过构造器注入,需要有参构造器!
关键是在原有的xml配置文件的头部<beans>标签内添加下面的语句:
xmlns:p="http://www.springframework.org/schema/c"
1、实体类
继续用上面的实体类
2、 配置xml
这里我们Student的属性address不再用引用类型注入了,而是直接赋值,因为Address只有一个参数name,而且我们已经写好了name的set方法,spring会帮我们自动通过set方法将参数传递给name属性。
<?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" 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"> <!--c命名空间注入,通过构造器注入,需要有有参构造器, 如果参数的类型是引用类型,spring可以自动调用引用对象的set方法来赋值--> <bean id="stu" class="com.study.pojo.Student" c:name="李元芳" c:age="19" c:address="太原"/> </beans>
3、测试
Student stu = context.getBean("stu",Student.class); System.out.println(stu);
运行结果:
Student{name='李元芳', age=19, address=Address{address='太原'}}