使用@ Autowired绑定在使用'new'实例化的实例内部不起作用。

6 浏览
0 Comments

使用@ Autowired绑定在使用'new'实例化的实例内部不起作用。

在我的Web Spring应用程序中,我使用关键字new创建了一个实例,如下所示。

在我的一个Action类中,存在以下方法。

public void process() { 
    MyBean b=new MyBean(); //用new初始化了实例  
    b.process();
}   

其他的MyBean类

@Service
public class MyBean {  
@Autowired  
MyService service;  
public void process() { 
    service.execute(); // 这个service实例没有通过Spring DI初始化。service对象为空。 
}

MyService实例没有被Spring的依赖注入设置。这是因为我自己用new创建了MyBean的实例,而不是使用Spring吗?

0
0 Comments

当你使用`new`关键字创建一个对象时,自动装配(autowire)和依赖注入(inject)将不起作用...

作为解决方法,你可以尝试以下操作:

首先创建一个`MyBean`的模板bean:


    

然后通过以下方式创建一个实例:

context.getBean("myBean");

PROTOTYPE : 这个作用域可以使单个bean定义具有任意数量的对象实例。

0
0 Comments

Binding with @Autowired not working inside instances initiated with 'new'。

出现的原因:使用'new'关键字实例化的对象无法使用@Autowired注解进行自动装配。

解决方法:可以通过编程方式进行自动装配,使用AutowireCapableBeanFactory的autowireBean方法来手动装配依赖。

示例代码如下:

private AutowireCapableBeanFactory beanFactory;
public void process() {
    MyBean obj = new MyBean();
    beanFactory.autowireBean(obj);
    // obj现在已经自动装配了它的依赖关系
}

0
0 Comments

在使用`@Autowired`注解进行依赖注入时,如果使用`new`关键字创建的实例不受Spring容器的管理,因此Spring默认只会为由Spring容器管理的实例注入依赖。为了解决这个问题,可以采取两种方法。第一种方法是不使用`new`关键字,而是通过`@Autowired`注解在`MyBean`实例上进行注入。第二种方法是在`MyBean`类上使用`@Configurable`注解。使用`@Configurable`注解后,Spring将会为通过`new`关键字创建的对象注入依赖。需要注意的是,使用`@Configurable`注解时需要在classpath中引入`AspectJ`的相关jar包。对于第二种方法,需要在`pom.xml`文件中添加以下依赖,并通过AspectJ编译器进行编译,以确保生成的字节码具有所需的功能。


    org.springframework
    spring-aspects
    3.1.1.RELEASE


    org.aspectj
    aspectjrt
    1.6.8


    org.aspectj
    aspectjweaver
    1.6.8


    org.aspectj
    aspectjtools
    1.6.8


    
        
            org.codehaus.mojo
            aspectj-maven-plugin
            1.4
            
                true
                1.6
                1.6
                ignore
                1.6
                UTF-8
                false
                
                    
                        org.springframework
                        spring-aspects
                    
                
            
            
                
                    
                        compile
                        test-compile
                    
                
            
            
                
                    org.aspectj
                    aspectjrt
                    1.6.8
                
                
                    org.aspectj
                    aspectjtools
                    1.6.11
                
            
        
    

以上是解决该问题的原因及解决方法,谢谢。你的意思是<dependency> <groupId>org.springframework</groupId> <artifactId>spring-aspects</artifactId> <version>4.0.6.RELEASE</version> </dependency>这个就足够了吗?

0