属性注入
构造方法注入
调用指定的带参构造方法给属性注入值
<bean id="". class="">
<constructor-arg index="" name="" value="" ref="">
<value></value>
</constructor-arg>
</bean>
代码实现:
目录结构:

创建UserBean:
package com.spring.beanbox;
public class UserBean {
private Integer id;
private String name;
private Character sex;
private String addr;
public UserBean(Integer id, String name, Character sex, String addr) {
this.id = id;
this.name = name;
this.sex = sex;
this.addr = addr;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Character getSex() {
return sex;
}
public void setSex(Character sex) {
this.sex = sex;
}
public String getAddr() {
return addr;
}
public void setAddr(String addr) {
this.addr = addr;
}
@Override
public String toString() {
return "UserBean{" +
"id=" + id +
", name='" + name + '\'' +
", sex=" + sex +
", addr='" + addr + '\'' +
'}';
}
}
创建bean.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="userBean" class="com.spring.beanbox.UserBean">
<constructor-arg index="0" value="11"></constructor-arg>
<constructor-arg index="1"><value>小明</value></constructor-arg>
<constructor-arg index="2" name="sex" value="男"></constructor-arg>
<constructor-arg index="3"><value>杭州</value></constructor-arg>
</bean>
</beans>
创建测试类:
package com.spring.beanbox;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class TestDemo {
@Test
public void test() throws Exception{
ApplicationContext ac = new ClassPathXmlApplicationContext("bean.xml");
UserBean userBean = (UserBean) ac.getBean("userBean");
System.out.println(userBean);
}
}
运行结果:

setter方法注入
按照指定的属性名,自动调用属性对应的setter方法给属性注入值
<bean id="userBean" class="com.spring.beanbox.UserBean">
<property name="" value="" ref="">
<value></value>
</property>
</bean>
代码实现;
目录结构:

创建UserBean:
package com.spring.beanbox;
public class UserBean {
private Integer id;
private String name;
private Character sex;
private String addr;
// 无参的构造方法
public UserBean() {
}
//get和set方法
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Character getSex() {
return sex;
}
public void setSex(Character sex) {
this.sex = sex;
}
public String getAddr() {
return addr;
}
public void setAddr(String addr) {
this.addr = addr;
}
//tostring方法
@Override
public String toString() {
return "UserBean{" +
"id=" + id +
", name='" + name + '\'' +
", sex=" + sex +
", addr='" + addr + '\'' +
'}';
}
}
创建bean.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="userBean" class="com.spring.beanbox.UserBean">
<property name="id" value="26"></property>
<property name="name"><value>小明</value></property>
<property name="sex" value="男"></property>
<property name="addr" value="杭州"></property>
</bean>
</beans>
创建测试类:
package com.spring.beanbox;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class TestDemo {
@Test
public void test() throws Exception{
ApplicationContext ac = new ClassPathXmlApplicationContext("bean.xml");
UserBean userBean = (UserBean) ac.getBean("userBean");
System.out.println(userBean);
}
}
运行结果:

集合注入
<bean id="userBean4"class="com.spring02.beanbox.UserBean">
<property name="数组">
<array>
<value></value>
</array>
</property>
<propertyname="list集合">
<list>
<value></value>
</list>
</property>
<property name="set集合">
<set><value></value></set>
</property>
<property name="map集合">
<map>
<entry key="" value=""></entry>
</map>
</property>
<property name="Properties集合">
<props><prop key=""></prop></props>
</property>
</bean>
代码实现:
目录结构:

创建Userbean:
package com.spring.beanbox;
import java.util.*;
public class UserBean {
private Integer[] array;
private List<String> list;
private Set<String> set;
private Map<String,Object> map;
private Properties prop;
public Integer[] getArray() {
return array;
}
public void setArray(Integer[] array) {
this.array = array;
}
public List<String> getList() {
return list;
}
public void setList(List<String> list) {
this.list = list;
}
public Set<String> getSet() {
return set;
}
public void setSet(Set<String> set) {
this.set = set;
}
public Map<String, Object> getMap() {
return map;
}
public void setMap(Map<String, Object> map) {
this.map = map;
}
public Properties getProp() {
return prop;
}
public void setProp(Properties prop) {
this.prop = prop;
}
//
public void desArray(){
System.out.println(Arrays.toString(array));
System.out.println(list);
System.out.println(set);
System.out.println(map);
System.out.println(prop);
}
}
创建bean.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="userBean" class="com.spring.beanbox.UserBean">
<property name="array">
<array>
<value>26</value>
<value>27</value>
<value>28</value>
<value>29</value>
</array>
</property>
<property name="list">
<list>
<value>tom</value>
<value>jack</value>
<value>lucy</value>
</list>
</property>
<property name="set">
<set>
<value>rose</value>
<value>jarry</value>
</set>
</property>
<property name="map">
<map>
<entry key="key1" value="value1"></entry>
<entry key="key2" value="value2"></entry>
</map>
</property>
<property name="prop">
<props>
<prop key="key1_1">key111</prop>
<prop key="key2_1">key222</prop>
</props>
</property>
</bean>
</beans>
创建测试类:
package com.spring.beanbox;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class TestDemo {
@Test
public void test() throws Exception{
ApplicationContext ac = new ClassPathXmlApplicationContext("bean.xml");
UserBean userBean = (UserBean) ac.getBean("userBean");
userBean.desArray();
}
}
运行结果:

注解注入
开发中可以使用注解取代xml配置文件。
@Component(id):指定目标类由spring容器管理。
web开发中,提供3个和@Component注解等效的注解:
@Repository:dao层
@Service:service层
@Controller:web层
依赖注入,注解可以给私有属性设置,也可以给setter方法。
普通值:@Value("")
引用值:方式1:按照【类型】注入:@Autowired
方式2:按照【名称】注入1:@Autowired@Qualifier("名称")
方式3:按照【名称】注入2:@Resource(name="名称")
生命周期:
初始化:@PostConstruct
销毁:@PreDestroy
作用域:
@Scope("prototype")多例
在配置文件中扫描含有注解类,使用注解前,添加context命名空间。<context:component-scan>需要导入aop的jar包
代码实现:
目录结构:

创建UserDao:
package com.spring.anno;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
@Component("userDao")
@Scope("prototype")
public class UserDao {
public void insertUser() {
System.out.println("用户信息录入成功");
}
}
创建UserService:
package com.spring.anno;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
@Service("userService")
public class UserService {
@Value("小李")
private String name;
@Autowired
private UserDao userDao;
private UserDao userDao2;
private UserDao userDao3;
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
public void setName(String name) {
this.name = name;
}
@Autowired
@Qualifier("userDao")
public void setUserDao2(UserDao userDao2) {
this.userDao2 = userDao2;
}
@Resourse(name = "userDao")
public void setUserDao3(UserDao userDao3) {
this.userDao3 = userDao3;
}
public void saveUser(){
System.out.println(name);
System.out.println(userDao);
System.out.println(userDao2);
System.out.println(userDao3);
userDao.insertUser();
}
@PostConstruct
public void init(){
System.out.println("UserService.init()");
}
@PreDestroy
public void des(){
System.out.println("UserService.des()");
}
}
创建bean.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"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<context:component-scan base-package="com.spring.anno"></context:component-scan>
</beans>
创建测试类:
package com.spring.anno;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class TestDemo {
@Test
public void test1() throws Exception{
ClassPathXmlApplicationContext ac = new ClassPathXmlApplicationContext("bean.xml");
UserService userService = ac.getBean(UserService.class);
userService.saveUser();
}
}
注解和xml混合
一般在开发中,习惯将目标类声明在配置文件中(xml配置),用注解进行目标类中属性的依赖注入。注解注入不会自动生效。必须在配置文件中指定使注解注入生效。<context:annotation-config>
一般情况下:<context:component-scan>注解和<context:annotation-config>注解不会同时出现。
代码实现:
项目目录:

创建UserDao:
package com.spring.anno_xml;
public class UserDao {
public void insertUser(){
System.out.println("用户信息录入成功");
}
}
创建UserService:
package com.spring.anno_xml;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.ImportResource;
import org.springframework.stereotype.Service;
public class UserService {
@Value("小明")
private String name;
@Autowired
private UserDao userDao;
private UserDao userDao2;
private UserDao userDao3;
public void setName(String name) {
this.name = name;
}
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
@Autowired
@Qualifier("userDao")
public void setUserDao2(UserDao userDao2) {
this.userDao2 = userDao2;
}
@Resource(name="userDao")
public void setUserDao3(UserDao userDao3) {
this.userDao3 = userDao3;
}
public void saveUser(){
System.out.println(name);
System.out.println(userDao);
System.out.println(userDao2);
System.out.println(userDao3);
userDao.insertUser();
}
@PostConstruct
public void init(){
System.out.println("UserService.init()");
}
@PreDestroy
public void des(){
System.out.println("UserService.des()");
}
}
创建bean.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"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<context:annotation-config></context:annotation-config>
<bean id="userDao" class="com.spring.anno_xml.UserDao"></bean>
<bean id="userService" class="com.spring.anno_xml.UserService"></bean>
</beans>
创建测试类:
package com.spring.anno_xml;
import org.junit.Test;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class TestDemo {
@Test
public void test() throws Exception{
ClassPathXmlApplicationContext ac = new ClassPathXmlApplicationContext("bean.xml");
UserService userService = ac.getBean(UserService.class);
userService.saveUser();
}
}
浙公网安备 33010602011771号