包括bean到应用程序上下文

时间:2017-06-13 15:41:38

标签: java spring-boot

我已经创建了一个新的Spring Boot项目来学习如何包含我在外部jar文件中声明的bean。我创建了一个名为ContextApplication的文件,我想要做的就是显示Spring扫描的所有bean。请注意,此过程中不涉及单个xml文件。我喜欢这样,宁愿保持这种状态。但是,如果必须,我会在这一点上尝试任何事情。

ContextApplication:

$(document).ready(function(){
    $("#print").one('click', function(ev){
        $('#main').prepend('<center><button class="btn btn-primary btn-lg" id="print2">복사하기</button></center>')
        $('.post').prepend('<input type="checkbox">');
        $("#print2").on('click', function(){
            var images ='';
            $('li').each(function(){
                var thisCheckFlag=$(this).children('input[type="checkbox"]').prop('checked');
                if(thisCheckFlag){
                images+='<img src ="'+$(this).find('img').attr('src')+'"><br>';
                }
            });
            if(images){
                var myWindow=window.open('','printWindow','width=800,height=800');
                myWindow.document.write(
                '<html><head><title>Print</title></head><body>'
                +images+'</body></html>'
                );
                myWindow.focus();
                myWindow.print();
            }
            else alert('먼저 선택하세요.');
        });
        ev.preventDefault();
    });
});

当我运行它时,它确实有效并提供了已知bean的列表,但是,作为项目的一部分,我引用了一个jar文件jed-1.6.jar,其中包含其他类,标记为@组件或@Service。

enter image description here

的pom.xml:

package com.anypackage.jedcontext;

import java.util.Arrays;

import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;

@SpringBootApplication
@ComponentScan(basePackages = {"com.tacticalenterprisesltd"})
public class JedcontextApplication {

    public static void main(String[] args) {
        SpringApplication.run(JedcontextApplication.class, args);
    }

    @Bean
    public CommandLineRunner commandLineRunner(ApplicationContext ctx) {
        return args -> {

            System.out.println("Let's inspect the beans provided by Spring Boot:");

            String[] beanNames = ctx.getBeanDefinitionNames();
            Arrays.sort(beanNames);
            for (String beanName : beanNames) {
                System.out.println(beanName);
            }

        };
    }
}

现在,当我运行应用程序时,jar文件中标记的类没有被扫描,也没有显示在控制台的列表中。即使我明确地提供了这个注释:@ComponentScan(basePackages = {&#34; com.tacticalenterprisesltd&#34;})在ContextApplication类上扫描jar文件中的所有内容。这将包括我希望的任何子包。所以,这里最底层的问题是,&#34;为什么不在jar文件中的类中读取Spring,我该怎么做呢?&#34;请指教。

1 个答案:

答案 0 :(得分:1)

您应该使用includeSystemScope参数将jar包含到SpringBoot应用程序的类路径中

<plugin>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-maven-plugin</artifactId>
  <configuration>
    <includeSystemScope>true</includeSystemScope>
  </configuration>
</plugin>

或者作为另一种选择,您可以将jar安装到本地maven存储库

mvn install:install-file -Dfile=path/to/jed-1.6.jar -DgroupId=com.tacticalenterprisesltd -DartifactId=jed -Dversion=1.6 -Dpackaging=jar

然后将其用作标准的maven依赖

   <dependency>
        <groupId>com.tacticalenterprisesltd</groupId>
        <artifactId>jed</artifactId>
        <version>1.6</version>
    </dependency>