Java里inject,java – 无论如何@ Inject / @将内部类自动装入外部类?

Spring / JSR-330中,有没有办法正确声明需要依赖注入的内部类,这样我可以将它注入外部类?

例如:

@Component

public class TestClass{

// How to declare this class?

private class TestClassInner{

@Autowired private SomeBean somebean;

public boolean doSomeWork(){

return somebean.doSomething();

}

}

// Inject the inner class here in the outer class such that the outer class can use an instance of it

@Autowired TestClassInner innerClass;

@PostConstruct

public void init(){

...

}

public void someMethod(){

innerClass.doSomeWork();

...

}

}

我试过用@Component注释内部类,使它成为一个公共类,使它成为公共静态等等,但似乎我尝试过的每一个组合总是会抛出一个或另一个错误.

作为一个私有内部类,Spring抱怨它缺少一个构造函数,即使我定义了一个.

作为一个带注释的@Component公共静态类,Spring抱怨它找到了两个bean – TestClass @ TestClassInner和testClass.TestClassInner.如果我使用@Qualifier,它会抱怨无法找到bean.

我认为我误解了这些内部bean如何工作/与Spring交互以正确理解是否/如何声明它们.

这甚至可能吗?

编辑

所以这里有一些我尝试过的组合(包括尝试实现基于@SotiriosDelimanolis响应的新构造函数):

// How to declare this class?

@Component

public class TestClassInner{

@Autowired private ProviderService providerService;

public TestClassInner(){

super();

}

public TestClassInner( TestClass t){

super();

}

}

引发错误(公共和私有内部类都抛出相同的错误):

Caused by: org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [com.ia.exception.TestClass$TestClassInner]: No default constructor found; nested exception is java.lang.NoSuchMethodException: com.ia.exception.TestClass$TestClassInner.()

at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:83)

at org.springframework.beans.factory.support.AbstractAutowireCapablebeanfactory.instantiateBean(AbstractAutowireCapablebeanfactory.java:1030)

... 54 more

我只是尝试使用我的测试类(上面)的静态公共嵌套类,它似乎正确注入.另一方面,在我的实际控制器中,它发现了2个匹配的类:

Caused by: org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type [com.ia.web.ContractController$InnerClass] is defined: expected single matching bean but found 2: com.ia.web.ContractController$InnerClass,contractController.InnerClass

at org.springframework.beans.factory.support.DefaultListablebeanfactory.doResolveDependency(DefaultListablebeanfactory.java:865)

编辑2

@Controller

public class ContractController {

@Component

static public class InnerClass extends AttachmentControllerSupport{

/**

*

*/

public InnerClass() {

super();

// TODO Auto-generated constructor stub

}

public InnerClass( ContractController c){

super();

}

}

@Autowired private InnerClass innerclass;

@Autowired private AttachmentControllerSupport attachmentControllerSupport;

@Autowired private ContractService contractService;

}

applicationContext.xml中:

restmvc-config.xml文件:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值