3.拓展方式注入
我们可以使用p命名空间以及c命名空间
官方解释
3.1 P命名空间
- 可以直接注入属性的值:property
在xml中插入
xmlns:p="http://www.springframework.org/schema/p"
例如:
<?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命名空间注入,可以直接注入属性的值:property--> <bean id="user" class="com.hxl.pojo.User" p:name="王木木" p:age="23"/> </beans>
3.2 c命名空间注入
- 可以通过构造器注入属性的值:construct-args
在xml中引入
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: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"> <!--p命名空间注入,可以直接注入属性的值:property--> <bean id="user" class="com.hxl.pojo.User" p:name="王木木" p:age="23"/> <!--c命名空间注入,可以通过构造器注入属性的值:construct-args--> <bean id="user2" class="com.hxl.pojo.User" c:name="王木木s" c:age="23"/> </beans>
- 这个地方要注意,实体类中要有有参构造,否则会报错。同时要有无参构造存在,否咋p命名空间会报错
3.3 测试
@Test public void test(){ ApplicationContext context = new ClassPathXmlApplicationContext("userBeans.xml"); User user = (User) context.getBean("user2"); System.out.println(user.toString()); } }
3.4 注意
p命名空间和c命名空间不能直接使用,需要导入xml约束
4. Bean的作用域
4.1 单例模式singleton
<bean id="user2" class="com.hxl.pojo.User" c:name="王木木s" c:age="23" scope="singleton"/>
User user = (User) context.getBean("user2",User.class); User user2 = (User) context.getBean("user2",User.class); System.out.println(user == user2);
虽然是两个user,但是是从一个单例拿出来的,也就是创建了一个实体类
可以显示的定义,默认是单例
4.2 原型模式
每次从容器中get的时候,都会产生一个新对象。
<!--c命名空间注入,可以通过构造器注入属性的值:construct-args--> <bean id="user2" class="com.hxl.pojo.User" c:name="王木木s" c:age="23" scope="prototype"/>
一旦用了这个之后再去测试上面的代码,会发现结果是false。
4.3 其余的request,session,application
这些只能在web开发中使用