当前位置: 首页 > 知识库问答 >
问题:

如何在Spring Boot库中使用注释(没有Main类)?

山疏珂
2023-03-14
@Service
class Data {

   public String getData(){
      return "DATA";
   }
} 

class Access{

   @Autowired
   private Data data;

   public String myData(){
  
      return data.getData();   // Null pointer exception
   }
}
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter</artifactId>
</dependency>

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <scope>test</scope>
</dependency>
@GetMapping("/") 
String print(){

   // Accesses the Library
   Access access=new Access();
   return access.myData();

}

@SpringBootApplication
@ComponentScan(basePackages = { "com.service", "com.library" }) // Hopes this Scans the library package
public class UserApplication {

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

}

pom.xml

<dependency>
    <groupId>com.library</groupId>
    <artifactId>library</artifactId>
    <version>0.0.1-SNAPSHOT</version>
</dependency>

如果我从库代码中删除Autowired并正常创建对象(使用new关键字),一切都很好。所以我的问题是,为了使用注释,需要带有@SpringBootApplication的Main类,没有Main类我们不能运行它吗?

共有1个答案

张和颂
2023-03-14

如果您不依赖任何Spring AOP特性(例如@transactional),那么最好的做法是完全不要这样做。字段上的@autowired是脆弱的;相反,使用普通构造函数。如果您只有一个构造函数,Spring就不需要注释来实例化bean,这使得您的类可以在不同的DI环境或普通Java中使用(例如用于测试)。

同样,不要将@service放在库中的类上;需要它的客户端可以简单地使用@import将其拉入。

其中一个例外是,如果提供引导自动配置设置,该模块将需要依赖于spring-boot-autoconfigure来访问注释。请注意,通常将初学者放在一个单独的依赖项中,该依赖项只包含引导类和元文件。

 类似资料:
  • 我只想使用@scheduler注释定期运行spring boot main方法。我已经指定了一些附加代码,这些代码将在启用REST服务之前执行一些预操作。 我想每10秒运行一次上面的主方法。并在主方法中添加了@时间表注释。但它抛出了一个例外: 根据doc@Scheduler的预期行为应调用一个没有args[]的方法 我想在main方法中使用注释,如下所示: 错误: 组织。springframewo

  • 问题内容: 是否可以使用Hibernate验证程序API将经过验证的对象存储在带有注释的字段中?例如,我想通过调用Java方法而不是在Java bean属性上添加注释来验证地址。 问题答案: 是的,有可能。尝试类似的东西, 看看这里。 (编辑必须为6个字符)

  • 我对AOP相当陌生。我正在尝试使用AspectJ在没有Spring的maven项目中创建注释。然而,我试图使用@方面调用的方法没有被调用。 这就是我的pom看起来的样子: 注释如下所示: 我为我的注释创建了一个注释处理器: } 我在这次通话中称之为: 我创建了一个aop。xml文件,并将其放置在与pom相同的文件夹中。xml。 当我调用createPurchase方法时,它在没有首先调用@Befo

  • 问题内容: 我没有用Java 获得注释。如果它自动为您继承方法,那么如果我需要以自己的方式实现该方法,那又如何呢? 怎么知道我的实现方式? 另外,据说如果我不想使用它,而是以一种老式的Java方式执行它,则必须实现类的,和方法以及类的注释类型方法。 这是为什么? 即使我不知道注释和以前运行良好的程序,我也从未实现过。 请有人从头开始向我解释一下。 问题答案: 只是没有误会:您确实要询问java.l

  • 我正在从下面的方法中获取电影列表,并带有@Cacheable注释。由于它没有任何参数,我将key设置为#root.method.name。 现在,我想添加一个新的电影,同样应该添加到上述缓存。 我试过这个,但它给了我例外。 我们可以在这里使用@CachePut注释,还是有其他方法?