spring
Posted 蜘蛛+互联王
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了spring相关的知识,希望对你有一定的参考价值。
6.2 Set方式注入【重点】
依赖注入:Set注入
依赖:bean对象的创建依赖于容器!
注入:bean对象中的所有属性,由容器来注入!
【环境搭建】
1.复杂类型
public class Address {
private String address;
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
2 真实的测试对象
private String name;
private Address address;
private String[] book;
private List<String> hobbys;
private Map<String,String> card;
private Set<String> games;
private String wife;
private Properties info;
3 beans.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">
<bean id="address" class="com.yang.pojo.Address">
<property name="address" value="西安"/>
</bean>
<bean id="student" class="com.yang.pojo.Student">
<!--第一种普通值注入,value-->
<property name="name" value="王重阳"></property>
<!--第二种bean注入,ref-->
<property name="address" ref="address"></property>
<!--第三种,数组注入-->
<property name="book">
<array >
<value>西游记</value>
<value>红楼梦</value>
<value>水浒传</value>
</array>
</property>
<!--list-->
<property name="hobbys">
<list>
<value>听歌</value>
<value>看电影</value>
<value>敲代码</value>
</list>
</property>
<!--Map-->
<property name="card">
<map>
<entry key="身份中" value="13092319951101373X"/>
<entry key="银行卡" value="1221515151151215451215"/>
</map>
</property>
<!--set-->
<property name="games">
<set>
<value>LOL</value>
<value>COC</value>
<value>BOB</value>
</set>
</property>
<!--null-->
<property name="wife">
<null/>
</property>
<!--propertty-->
<property name="info">
<props>
<prop key="学号">20173600</prop>
<prop key="性别">男</prop>
<prop key="姓名">王重阳</prop>
</props>
</property>
</bean>
</beans>
4 测试类
public class MyText {
public static void main(String[] args) {
ApplicationContext context=new ClassPathXmlApplicationContext("beans.xml");
Student student=(Student) context.getBean("student");
System.out.println(student.toString()));
}
}
5 拓展方式注入
我们可以使用P命名空间和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.yang.pojo.User" p:name="王王王" p:age="15"/>
<!--c命名空间注入,通过构造器注入:construct-args-->
<bean id="user2" class="com.yang.pojo.User" c:age="18" c:name="网虫昂"/>
</beans>
测试
@Test
public void test2(){
ApplicationContext context = new ClassPathXmlApplicationContext("userbeans.xml");
User user = (User) context.getBean("user2");
System.out.println(user);
}
注意 p命名和c命名空间不能直接使用,需要导入xml约束
xmlns:p="http://www.springframework.org/schema/p"
xmlns:c="http://www.springframework.org/schema/c"
6 Bean的作用域
1 默认单例 singleton(一般单线程)
<bean id="user2" class="com.yang.pojo.User" c:age="18" c:name="王重" scope="singleton"/>
2 原型模式prototype(一般多线程)
<bean id="user2" class="com.yang.pojo.User" c:age="18" c:name="网虫昂" scope="prototype"/>
新创建的两个对象不相等(每次从容器中get时,都会产生新的对象)
3 其余的 request ,session,application(web)
7 Bean的自动装配
自动装配是Spring满足bean依赖一种方式!
Spring会在上下文中自动寻找,自动的装配属性
三种装配模式:
1 在xml中显示的配置
2 在java中显示的配置
*3 隐式的自动装配bean
7.1 测试
1 环境搭建
。一个人有两个宠物!
7.2 ByName自动装配
<bean id="people" class="com.yang.pojo.People" >
<property name="name" value="王重"/>
<property name="dog" ref="dog"/>
<property name="cat" ref="cat"/>
</beans>
<bean id="people" class="com.yang.pojo.People" autowire="byName">
<!--byName:会自动在容器上下文中查找,和自己对象set方法后面的值对应的beanid!-->
<property name="name" value="王重"/>
<!--<property name="dog" ref="dog"/>-->
<!--<property name="cat" ref="cat"/>-->
</bean>
7.3 ByType自动装配
根据类型来找,bean没有id也可以找到;
以上是关于spring的主要内容,如果未能解决你的问题,请参考以下文章
Spring boot:thymeleaf 没有正确渲染片段
What's the difference between @Component, @Repository & @Service annotations in Spring?(代码片段
spring练习,在Eclipse搭建的Spring开发环境中,使用set注入方式,实现对象的依赖关系,通过ClassPathXmlApplicationContext实体类获取Bean对象(代码片段
Spring Rest 文档。片段生成时 UTF-8 中间字节无效 [重复]
解决spring-boot启动中碰到的问题:Cannot determine embedded database driver class for database type NONE(转)(代码片段