从注释处理器生成Spring组件

时间:2019-12-18 12:41:29

标签: java spring spring-boot annotation-processor

我正在使用自定义AbstractProcessor来生成一些类。我试图生成Spring组件A和B,其中B“自动装配”A。输出类类似于:

@Component
public class ClassA {
    @Bean
    public MyBean getMyBean() {
        return new MyBean();
    }
}
@Component
public class ClassB {
    @Autowired
    private ClassA myClassA;

    private MyBean myBean;

    public ClassB() {
        this.myBean = myClassA.getMyBean();
    }
}

但是自动连线的myClassA为空。 我怀疑在对我的班级进行通用训练之前会进行春季扫描。

当我运行mvn clean install

...
[INFO] --- spring-boot-maven-plugin:2.0.1.RELEASE:repackage (default) @ main ---

[INFO] --- maven-install-plugin:2.5.2:install (default-install) @ main ---
[INFO] Installing C:\Users\me\Documents\kubernetes\spring\testproject2\main\target\main-1.0-SNAPSHOT.jar to C:\Users\me\.m2\repository\be\mycompany\main\1.0-SNAPSHOT\main-1.0-SNAPSHOT.jar
[INFO] Installing C:\Users\me\Documents\kubernetes\spring\testproject2\main\pom.xml to C:\Users\me\.m2\repository\be\mycompany\main\1.0-SNAPSHOT\main-1.0-SNAPSHOT.pom

其中指出spring-boot-maven-pluginmaven-install-plugin之前运行。 这是我的“注释处理器”项目中使用的插件配置:

<build>
    <plugins>
        <plugin>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.8.1</version>
            <configuration>
                <source>1.8</source>
                <target>1.8</target>
                <showWarnings>true</showWarnings>
            </configuration>
            <executions>
                <execution>
                    <id>default-compile</id>
                    <configuration>
                        <compilerArgument>-proc:none</compilerArgument>
                        <includes>
                            <include>be/mycompany/testproject2/dbgenerator/processing/DatabaseAnnotationProcessor.java</include>
                        </includes>
                    </configuration>
                </execution>
                <execution>
                    <id>compile-project</id>
                    <phase>compile</phase>
                    <goals>
                        <goal>compile</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

关于如何确保生成的组件可以自动装配自身的任何提示?

谢谢。

1 个答案:

答案 0 :(得分:0)

在这种情况下,您应该使用Class B的构造函数来确保Class A存在:

@Component
public class ClassB {
    @Autowired
    private ClassA myClassA;

    private MyBean myBean;

    public ClassB(ClassA myClassA) {
        this.myBean = myClassA.getMyBean();
        this.myClassA= myClassA;
    }
}