使用CommandLineRunner完成启动时也从Bean容器获取对象

BeanConfig.java

package com.example.testsb.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class BeanConfig {
    @Bean
    BeanEntity beanEntity() {
        return new BeanEntity(1);
    }
}

 Main.java

package com.example.testsb;

import com.example.testsb.config.BeanEntity;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@Slf4j
@SpringBootApplication
public class TestSbApplication implements CommandLineRunner {

    @Autowired
    private BeanEntity beanEntity;

    public static void main(String[] args) throws Exception {
        SpringApplication.run(TestSbApplication.class);
    }

    @Override
    public void run(String... args) throws Exception {
        // 启动模块1
        initEntity();
    }

    private void initEntity() {
        log.info("id={}", beanEntity.getId());
    }
}

/*
  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::                (v2.6.2)

[2024-05-13 08:19:46.061] [main] [StartupInfoLogger.java:55] ([INFO][com.example.testsb.TestSbApplication] Starting TestSbApplication using Java 11 on ELEX-M0192 with PID 19296 (E:\04_my_test\TestSB\target\classes started by elex in E:\04_my_test\TestSB)
[2024-05-13 08:19:46.065] [main] [SpringApplication.java:635] ([INFO][com.example.testsb.TestSbApplication] No active profile set, falling back to default profiles: default
[2024-05-13 08:19:46.754] [main] [TomcatWebServer.java:108] ([INFO][org.springframework.boot.web.embedded.tomcat.TomcatWebServer] Tomcat initialized with port(s): 8080 (http)
[2024-05-13 08:19:46.763] [main] [DirectJDKLog.java:173] ([INFO][org.apache.coyote.http11.Http11NioProtocol] Initializing ProtocolHandler ["http-nio-8080"]
[2024-05-13 08:19:46.764] [main] [DirectJDKLog.java:173] ([INFO][org.apache.catalina.core.StandardService] Starting service [Tomcat]
[2024-05-13 08:19:46.766] [main] [DirectJDKLog.java:173] ([INFO][org.apache.catalina.core.StandardEngine] Starting Servlet engine: [Apache Tomcat/9.0.56]
[2024-05-13 08:19:46.827] [main] [DirectJDKLog.java:173] ([INFO][org.apache.catalina.core.ContainerBase.[Tomcat].[localhost].[/]] Initializing Spring embedded WebApplicationContext
[2024-05-13 08:19:46.828] [main] [ServletWebServerApplicationContext.java:290] ([INFO][org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext] Root WebApplicationContext: initialization completed in 721 ms
[2024-05-13 08:19:47.100] [main] [DirectJDKLog.java:173] ([INFO][org.apache.coyote.http11.Http11NioProtocol] Starting ProtocolHandler ["http-nio-8080"]
[2024-05-13 08:19:47.116] [main] [TomcatWebServer.java:220] ([INFO][org.springframework.boot.web.embedded.tomcat.TomcatWebServer] Tomcat started on port(s): 8080 (http) with context path ''
[2024-05-13 08:19:47.126] [main] [StartupInfoLogger.java:61] ([INFO][com.example.testsb.TestSbApplication] Started TestSbApplication in 1.35 seconds (JVM running for 2.536)
[2024-05-13 08:19:47.127] [main] [TestSbApplication.java:27] ([INFO][com.example.testsb.TestSbApplication] id=1
 */

总结:

由于SpringBoot本身的复杂性,我准备只使用: 依赖注入这一个模块。 这样子基本上就达到堆模块就实现最终的功能。 保持最简单的使用,减少出错。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java 项目启动后,可以在 Spring 容器中创建对象的方式有多种,以下是其中两种常用的方式: 1. 使用注解标注 Bean 类 可以在 Bean 类上使用 Spring 提供的注解,如 @Component、@Service、@Repository、@Controller 等,来告诉 Spring 容器这个类是一个 Bean,需要被管理。在 Spring 容器启动时,会自动扫描这些注解,并将相应的类创建成 Bean。 例如,我们可以在 User 类上标注 @Component 注解: ```java @Component public class User { private String name; private int age; // 省略构造方法和 getter/setter 方法 } ``` 在 Spring 的配置文件中,需要使用 `<context:component-scan>` 标签来配置要扫描的包路径: ```xml <context:component-scan base-package="com.example" /> ``` 这样,在启动 Spring 容器后,就可以使用 `context.getBean(User.class)` 方法来获取 User 对象了。 2. 在配置文件中声明 Bean 也可以通过在 Spring 的配置文件中声明 Bean,来告诉 Spring 容器需要创建哪些对象。在配置文件中使用 `<bean>` 标签来声明 Bean,并指定其 id 和 class 属性。 例如,我们可以在配置文件中声明一个名为 "user" 的 Bean: ```xml <bean id="user" class="com.example.User"> <property name="name" value="Tom" /> <property name="age" value="18" /> </bean> ``` 在启动 Spring 容器后,可以使用 `context.getBean("user", User.class)` 方法来获取 User 对象。 需要注意的是,使用声明 Bean 的方式需要在配置文件中手动配置 Bean 的属性,而使用注解标注 Bean 类则可以自动扫描类的属性并配置 Bean。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值