spring的ioc注入方式有几种?

//它们代表了Spring容器,Spring容器是产生Bean的工厂,用于管理容器中的Bean。

一、Set注入

spring手动注入bean springbean的注入spring手动注入bean springbean的注入


spring手动注入bean springbean的注入


二、构造器注入

三、静态工厂的方法注入

内容拓展:

一、Set注入

1、这是最简单的注入方式,设有一个SpringAction,类中需要实例化一个SpringDao对象,那么就可以定义一个private的SpringDao成员变量,然后创建SpringDao的set方法(这是ioc的注入入口)。

2、随后编写spring的xml文件,中的name属性是class属性的一个别名,class属性指类的全名,因为在SpringAction中有一个公共属性Springdao,所以要在标签中创建一个

标签指定SpringDao。

标签中的name就是SpringAction类中的SpringDao属性名,ref指下面,这样其实是spring将SpringDaoImpl对象实例化并且调用SpringAction的setSpringDao方法将SpringDao注入。

1、这种方式的注入是指带有参数的构造函数注入,看下面的例子,我创建了两个成员变量SpringDao和User,但是并未设置对象的set方法,所以就不能支持种注入方式,这里的注入方式是在SpringAction的构造函数中注入,也就是说在创建SpringAction对象时要将SpringDao和User两个参数值传进来。

2、在XML文件中同样不用

的形式,而是使用标签,ref属性同样指向其它标签的name属性。

三、静态工厂的方法注入

1、静态工厂顾名思义,就是通过调用静态工厂的方法来获取自己需要的对象,为了让spring管理所有对象,我们不能直接通过"工程类.静态方法()"来获取对象,而是依然通过spring注入的形式获取。

spring容器已经启动,我怎么动态的加载里面的某个bean

private NonSpringClass nonSpringClass;

[引文]通常在struts2+spr2、同样看关键类,这里我需要注入一个FactoryDao对象,这里看起来跟种注入一模一样,但是看随后的xml会发现有很大别。ing的例子上,要想使用spring的Bean,可以在applicationContext.xml加上如下配置

一旦struts2的myAction实例化,其中的SpringBean也会被自动注入进来,从而达到使用SpringBean的目的。

[问题]但是仍有需要通过代码来调用SpringBean的情况:

1)对于不是由spring创建管理的类,如在ja 代码中直接使用new去创建一个对象,并且想在这个对象中使用

SpringBean;因为这个对象并不是由Spring容器创建管理的类,所以即使它有setter方法,容器的springBean也不会被注入。

2)动态更改springBean中的属性值,如在代码运行时,name值需要发生变动;

3)对于一个的应用程序[解决]定义一个非Spring容器创建管理的类

public class NonSpringClass implements ServletContextAware {

private SpringBean springBean;

//如果 testGetBean不是被Spring容器创建管理,即使它有setter方法,容器的springBean也不会被注入。

public void setSpringBean(SpringBean springBean){this.springBean=springBean;}//利用ApplicationContext 从spring容器中获得springBean;

//Spring有两个核心接口BeanFactory和ApplicationContext,其中ApplicationContext是BeanFactory的子接口,

public NonSpringClass (){//ApplicationContext acx = new ClassPathXmlApplicationContext("applicationContext.xml");

ApplicationContext acx = new FileSystemXmlApplicationContext("src/WEB-INF/applicationContext.xml");

springBean=(SpringBean)acx.getBean("springBean");}}调用这个类的代码:

import com.NonSpringClass;

public class TestCode {

//这样nonSpringClass里将包含Spring容器创建的springBean}}