当已经写好了POJO类的Java代码之后,可以使用XML的方式去装配注入Bean

spring private final 注入失败 spring注入pojo_spring

spring private final 注入失败 spring注入pojo_spring_02

整体的XML配置文件如下:文件名比如  Spring-cfg.xml

spring private final 注入失败 spring注入pojo_spring_03

 

spring的配置文件名到底应是什么呢?默认的情况下spring会从web-inf目录下去找spring的配置文件,并且spring的配置文件名是applicationContext.xml,如果不想让spring的配置文件名为applicationContext.xml,而是把配置文件名改成beans.xml,那么就应在当前程序的web.xml中加入下面的话, 

<context-param>  
     <param-name>contextConfigLocation</param-name>  
     <param-value>/WEB-INF/beans.xml</param-value>  
</context-param>

 

这样就可以对spring配置文件进行改名了 

如果有多个spring配置文件,那么就可以用逗号把相应的文件名隔开,如下所示 

<context-param>  
         <param-name>contextConfigLocation</param-name>  
         <param-value>/WEB-INF/beans_1.xml,/WEB-INF/beans_2.xml</param-value>  
    </context-param>

 

 

下面开始写各个  <bean>

spring private final 注入失败 spring注入pojo_配置文件_04

spring private final 注入失败 spring注入pojo_spring_05

spring private final 注入失败 spring注入pojo_xml_06

 

注意,上面的方式,是使用无参数的构造方法的方式,给成员变量(属性)赋值,并装配注入Bean,又称为setter方式 注入;

也可以用 有参数的构造方法,来装配注入Bean;

这里注意,不管是使用setter方式(无参构造方式),还是使用下面的有参数构造方法的方式,其最终的目的,都是给成员变量赋初值并且注入,只要能达到这一目的都可。

这两种方式的效果是一样的,推荐使用上面的方式。

spring private final 注入失败 spring注入pojo_spring_07

这就是用XML去配置注入POJO类,也可以使用Java注解方式、配置扫描的方式 去注入POJO类,详见其他的博客。

 

————————————————————————————————————————————————

 通过注解@Autowired注入Spring IoC容器

Spring 2.5 引入了 @Autowired 注解,它可以对类成员变量、方法及构造函数进行标注,完成自动装配的工作。 通过 @Autowired的使用来消除 set ,get方法。

需要以下步骤:

1、在Spring的applicationContext.xml配置文件中加入下面的一个<bean>标签,并且把要注入的POJO的<bean>标签中的<property>标签给去掉。
<!-- 该 BeanPostProcessor 将自动对标注 @Autowired 的 Bean 进行注入 -->
<bean class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor"/>

 

Spring 通过 BeanPostProcessor 对 @Autowired 进行解析,所以要让 @Autowired 起作用必须事先在 Spring 容器中声明 AutowiredAnnotationBeanPostProcessor Bean。

2、在POJO的Java代码中,删除set和get方法,并对成员变量增加 @Autowired 注解。

这样,当 Spring 容器启动时,AutowiredAnnotationBeanPostProcessor 将扫描 Spring 容器中所有 Bean,当发现 Bean 中拥有 @Autowired 注释时就找到和其匹配(默认按类型匹配)的 Bean,并注入到对应的地方中去。

3、也可以通过 @Autowired 对方法或构造函数进行标注

如果构造函数有两个入参,分别是 bean1 和 bean2,@Autowired 将分别寻找和它们类型匹配的 Bean,将它们作为 CountryService (Bean1 bean1 ,Bean2 bean2) 的入参来创建 CountryService Bean。来看下面的代码:

public class Boss {
    private Car car;
    private Office office;
    @Autowired
public  void setCar(Car car) {
        this.car = car;
    }
    @Autowired
    public void setOffice(Office office) {
        this.office = office;
    }
}