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='太原'}}