SpringBoot定義Bean的幾種實(shí)現(xiàn)方式

springboot定義bean的幾種實(shí)現(xiàn)方式

 

1.@bean

@bean
public demoservice demoservice() {
  return new demoservice();
}

 

2.@component

@component
public class demoservice {
}

 

3.@controller、@restcontroller、@service、@repository

@restcontroller
public class democontroller{
  @getmapping("/test")
  public string test() {
      return "succeed";
  }
}

 

4.@controlleradvice、@restcontrolleradvice

import org.springframework.core.methodparameter;
import org.springframework.http.mediatype;
import org.springframework.http.server.serverhttprequest;
import org.springframework.http.server.serverhttpresponse;
import org.springframework.web.bind.annotation.controlleradvice;
import org.springframework.web.servlet.mvc.method.annotation.responsebodyadvice;
/**
 * 

@title democontrolleradvice  *

@description controller增強(qiáng)  *  * @author acgkaka  * @date 2023/4/25 21:07  */ @controlleradvice public class democontrolleradvice implements responsebodyadvice {     @override     public boolean supports(methodparameter methodparameter, class aclass) {         return true;     }     @override     public object beforebodywrite(object body, methodparameter methodparameter, mediatype mediatype, class aclass, serverhttprequest serverhttprequest, serverhttpresponse serverhttpresponse) {         system.out.println("body is: " + body);         return body;     } }

注意:@controlleradvice相當(dāng)于對(duì)于controller的切面,可以綁定propertyeditor。

(類(lèi)似于aop,但是底層不是aop實(shí)現(xiàn)。)

 

5.@configuration

@configuration
public class democonfig {
}

注意:@configuration 主要標(biāo)識(shí)一個(gè)bean是一個(gè)配置bean,利用這個(gè)bean可以對(duì)spring進(jìn)行配置,比如掃描路徑、定義其他的bean。

 

6.@import

@springbootappilcation
@import(demo.class)
public class myapplication {
  public static void main(string[] args) {
      springapplication.run(myapplication.class);
  }
}

 

7.beandefinition

這是我們其他所有方法的底層實(shí)現(xiàn)。

myapplication.java

@springbootapplication
@import(demoimportbeandefinitionregistrar.class)
public class myapplication {
  public static void main(string[] args) {
      springapplication.run(myapplication.class);
  }
}

demoimportbeandefinitionregistrar.java

import com.demo.service.demoservice;
import org.springframework.beans.factory.support.abstractbeandefinition;
import org.springframework.beans.factory.support.beandefinitionbuilder;
import org.springframework.beans.factory.support.beandefinitionregistry;
import org.springframework.beans.factory.support.beannamegenerator;
import org.springframework.context.annotation.importbeandefinitionregistrar;
import org.springframework.core.type.annotationmetadata;
/**
 * 

@title demoimportbeandefinationregistar  *

@description @import注解的實(shí)現(xiàn)類(lèi)  *  * @author acgkaka  * @date 2023/4/25 21:18  */ public class demoimportbeandefinitionregistrar implements importbeandefinitionregistrar {     @override     public void registerbeandefinitions(annotationmetadata importingclassmetadata, beandefinitionregistry registry, beannamegenerator importbeannamegenerator) {         abstractbeandefinition beandefinition = beandefinitionbuilder.genericbeandefinition().getbeandefinition();         // 定義bean         beandefinition.setbeanclass(demoservice.class);         // 注冊(cè)bean         registry.registerbeandefinition("demoservice", beandefinition);     } }

 

8.

最古老的方式

@springbootapplication
@importresource("classpath:spring.xml")
public class myapplication {
  public static void main(string[] args) {
      springapplication.run(myapplication.class);
  }
}

spring.xml

<!--?xml version="1.0" encoding="utf-7"
                
相關(guān)文章
亚洲国产精品第一区二区,久久免费视频77,99V久久综合狠狠综合久久,国产免费久久九九免费视频