Spring 如何在同一个bean中自动连接bean

Spring 如何在同一个bean中自动连接bean,spring,dependency-injection,Spring,Dependency Injection,我想将bean A的实例自动连接到A的同一个实例。如何使用注释(没有XML)实现这一点 例如: @服务 公共A类{ @自动连线 A A; } 我也试过了 @服务 公共A类{ A A; @自动连线 公开作废setA(最终版本A){ 这个a=a; } } 但它也不起作用:-/ 使用类XML进行配置 很好。而且也可以使用 @服务 公共类A实现初始化bean{ A A; @自动连线 应用上下文ctx; @凌驾 public void afterPropertieSet()引发异常{ a=ctx.

我想将bean A的实例自动连接到A的同一个实例。如何使用注释(没有XML)实现这一点

例如:

@服务
公共A类{
@自动连线
A A;
}
我也试过了

@服务
公共A类{
A A;
@自动连线
公开作废setA(最终版本A){
这个a=a;
}
}
但它也不起作用:-/

使用类XML进行配置


很好。而且也可以使用

@服务
公共类A实现初始化bean{
A A;
@自动连线
应用上下文ctx;
@凌驾
public void afterPropertieSet()引发异常{
a=ctx.getBean(a.class);
}
}

但这很麻烦。奇怪的是,Spring在使用XML配置时可以处理这个问题,但在使用基于注释的配置时却无法处理。

@Autowired
在寻找autowire候选对象时跳过注释bean,改用
@Resource

@Autowired
在查找autowire候选对象时跳过带注释的bean,改用
@Resource

我理解得对吗?您的根本问题是因为您从同一类中的非事务性方法中调用了事务性方法而没有应用事务性建议吗?您不能将事务代码提取到另一个类中吗?这难道不是比这个奇怪的结构更具可读性吗

例如


我的理解正确吗?您的根本问题是因为您从同一类中的非事务性方法中调用事务性方法而没有应用事务性建议吗?您不能将事务代码提取到另一个类中吗?这难道不是比这个奇怪的结构更具可读性吗

例如


您可以使用编译时编织(使用Aspectj编译器),这样方面就不需要代理来工作。 只需将此添加到pom.xml配置中:

<dependency>
    <groupId>org.aspectj</groupId>
    <artifactId>aspectjrt</artifactId>
</dependency>

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>aspectj-maven-plugin</artifactId>
    <configuration>
        <aspectLibraries>
            <aspectLibrary>
                <groupId>org.springframework</groupId>
                <artifactId>spring-aspects</artifactId>
            </aspectLibrary>
        </aspectLibraries>
    </configuration>
</plugin>

org.aspectj
aspectjrt
org.codehaus.mojo
aspectj maven插件
org.springframework
春季方面

您可以使用编译时编织(使用Aspectj编译器),这样方面就不需要代理才能工作。 只需将此添加到pom.xml配置中:

<dependency>
    <groupId>org.aspectj</groupId>
    <artifactId>aspectjrt</artifactId>
</dependency>

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>aspectj-maven-plugin</artifactId>
    <configuration>
        <aspectLibraries>
            <aspectLibrary>
                <groupId>org.springframework</groupId>
                <artifactId>spring-aspects</artifactId>
            </aspectLibrary>
        </aspectLibraries>
    </configuration>
</plugin>

org.aspectj
aspectjrt
org.codehaus.mojo
aspectj maven插件
org.springframework
春季方面

也许我在这里遗漏了一些东西,但为什么您需要这样做呢?因为我想从A调用A中的方法
m()
,但也要使用代理,它不用于调用
this.m()
,例如处理事务(
@Transactional
)。也许我在这里遗漏了一些东西,但为什么需要这样做呢?因为我想从A调用A中的方法
m()
,但也要使用代理,它不用于调用
this.m()
,例如处理事务(
@Transactional
),
AccountService
我希望在该服务中拥有与account相关的所有方法,而不是
accountservicetransaction
AccountServiceWithNewTransaction
。那么让@transaction中的每个方法都成为一个如何?另外,从?我的服务中调用m()的方法是事务性的,但是对于我想要新事务的某些方法,这些方法也从服务中调用…如果您将这些@transactional方法的传播设置为“传播”。需要新的吗?这能解决您的问题吗?这就是问题所在,当我使用事务方法
service.foo()
进行所需的传播,并使用REQUIRES\u NEW调用
service.bar()
,在未创建的情况下调用新事务,这不是代理调用,
AccountService
我希望在该服务中拥有与account相关的所有方法,而不是
accountservicetransaction
AccountServiceWithNewTransaction
。那么让@transaction中的每个方法都成为一个如何?另外,从?我的服务中调用m()的方法是事务性的,但是对于我想要新事务的某些方法,这些方法也从服务中调用…如果您将这些@transactional方法的传播设置为“传播”。需要新的吗?这能解决您的问题吗?这就是问题所在,当我使用事务方法
service.foo()
进行所需的传播,并使用REQUIRES\u NEW调用
service.bar()
时未创建新事务-这不是代理调用。