属性注入

构造方法注入

  调用指定的带参构造方法给属性注入值  

<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();
}
}

  

 

posted on 2021-08-21 15:29  tom和mt  阅读(939)  评论(0)    收藏  举报