SpringBoot的某些功能


 

在SpringBoot项目启动完成后自动执行某些代码(如初始化某些操作等),有以下2种方式去实现:实现下面2个接口

  • org.springframework.boot.ApplicationRunner
  • org.springframework.boot.CommandLineRunner

具体实现ApplicationRunner方法的Bean如下:

@Component
public class MyApplicationRunner implements ApplicationRunner {
    @Override
    public void run(ApplicationArguments var1) throws Exception{
        System.out.println("实现ApplicationRunner接口");
    }
}

具体实现CommandLineRunner方法的Bean如下:

@Component
public class MyCommandLineRunner implements CommandLineRunner{
    @Override
    public void run(String... var1) throws Exception{
        System.out.println("实现CommandLineRunner接口");
    }
}

启动项目,默认情况下:先执行ApplicationRunner,在执行CommandLineRunner方法

2020-02-23 20:45:00.955  INFO 18492 --- [           main] o.a.kafka.common.utils.AppInfoParser     : Kafka version : 1.0.2
2020-02-23 20:45:00.955  INFO 18492 --- [           main] o.a.kafka.common.utils.AppInfoParser     : Kafka commitId : 2a121f7b1d402825
2020-02-23 20:45:00.960  INFO 18492 --- [           main] o.s.s.c.ThreadPoolTaskScheduler          : Initializing ExecutorService 
2020-02-23 20:45:00.998  INFO 18492 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8899 (http) with context path ''
2020-02-23 20:45:01.003  INFO 18492 --- [           main] c.n.community.crm.CrmWebApplication      : Started CrmWebApplication in 9.338 seconds (JVM running for 10.743)
实现ApplicationRunner接口
实现CommandLineRunner接口

当然,也可以通过Spring提供的@Order注解或者Ordered接口来更新Bean执行的顺序,值越小越先执行,比如我们给实现ConnandLineRunner接口的Bean添加注解@Order(1),给实现ApplicationRunner接口的Bean添加@Order(2),再次启动项目的时候我们可以看到:

2020-02-23 20:47:46.947  INFO 25148 --- [           main] o.a.kafka.common.utils.AppInfoParser     : Kafka version : 1.0.2
2020-02-23 20:47:46.947  INFO 25148 --- [           main] o.a.kafka.common.utils.AppInfoParser     : Kafka commitId : 2a121f7b1d402825
2020-02-23 20:47:46.951  INFO 25148 --- [           main] o.s.s.c.ThreadPoolTaskScheduler          : Initializing ExecutorService 
2020-02-23 20:47:46.990  INFO 25148 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8899 (http) with context path ''
2020-02-23 20:47:46.995  INFO 25148 --- [           main] c.n.community.crm.CrmWebApplication      : Started CrmWebApplication in 8.73 seconds (JVM running for 10.114)
实现CommandLineRunner接口
实现ApplicationRunner接口

当然除了以上2种方式,我们可以里利用Spring中Bean生命周期或者Spring容器的生命周期的相关接口

1.实现ServletContextAware接口并重写其setServletContext方法

复制代码

@Component
public class TestStarted implements ServletContextAware {
    /**
     * 在填充普通bean属性之后但在初始化之前调用
     * 类似于initializingbean的afterpropertiesset或自定义init方法的回调
     *
     */
    @Override
    public void setServletContext(ServletContext servletContext) {
        System.out.println("setServletContext方法");
    }
}

注意:该方法会在填充完普通Bean的属性,但是还没有进行Bean的初始化之前执行 

2.实现ServletContextListener接口

    /**
     * 在初始化Web应用程序中的任何过滤器或servlet之前,将通知所有servletContextListener上下文初始化。
     */
    @Override
    public void contextInitialized(ServletContextEvent sce) {
        //ServletContext servletContext = sce.getServletContext();
        System.out.println("执行contextInitialized方法");
    }

复制代码

3.将要执行的方法所在的类交个spring容器扫描(@Component),并且在要执行的方法上添加@PostConstruct注解或者静态代码块执行

@Component
public class Test2 {
    //静态代码块会在依赖注入后自动执行,并优先执行
    static{
        System.out.println("---static--");
    }
    /**
     *  @Postcontruct’在依赖注入完成后自动调用
     */
    @PostConstruct
    public static void haha(){
        System.out.println("@Postcontruct’在依赖注入完成后自动调用");
    }
}

复制代码

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Spring Boot 是一个快速开发的框架,可以轻松地实现权限管理功能。下面是一些实现权限管理的步骤: 1. 集成 Spring Security:Spring Security 是一个功能强大的安全框架,可以帮助我们实现身份验证、授权和其他安全功能。我们可以使用 Spring Security 来保护我们的应用程序,确保只有经过身份验证的用户才能访问受保护的资源。 2. 配置安全规则:我们可以通过配置文件或编程方式定义安全规则,以控制用户对受保护资源的访问。例如,我们可以定义一个规则,只有具有管理员角色的用户才能访问某些特定的资源。 3. 实现自定义用户认证:Spring Security 默认提供了一些用户认证机制,例如使用数据库或LDAP进行用户认证。但是,我们也可以实现自定义认证机制,以满足我们特定的需求。 4. 实现角色授权:我们可以将用户分配到不同的角色中,以控制他们对受保护资源的访问。例如,我们可以定义一个角色为“管理员”,只有具有该角色的用户才能访问某些受保护的资源。 5. 实现访问控制:除了角色授权外,我们还可以使用 Spring Security 中提供的其他机制来控制用户对受保护资源的访问,例如基于请求 URL、HTTP 方法或其他自定义条件的访问控制。 6. 集成第三方认证服务:如果我们不想使用自己的认证系统,可以集成第三方认证服务,例如OAuth2、SAML或OpenID Connect等服务。 总的来说,Spring BootSpring Security 提供了强大的功能,可以轻松地实现权限管理功能。我们只需要按照上述步骤进行配置和实现即可。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值