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"
- JavaSE中compare、compareTo有什么區(qū)別
- Java中線程安全的實(shí)現(xiàn)思路介紹
- mybatis集成到spring的方式有哪些
- Java讀取resources中資源文件路徑以及jar中文件無(wú)法讀取如何解決
- java中switch語(yǔ)句的用法介紹
- Mybatis操作多數(shù)據(jù)源實(shí)現(xiàn)的方法
- Springboot自帶線程池怎么實(shí)現(xiàn)
- java的預(yù)定義Class對(duì)象的方法
- 解決Springboot全局異常處理與AOP日志處理中@AfterThrowing失效問(wèn)題的方法
- Java使用HttpUtils怎么實(shí)現(xiàn)發(fā)送HTTP請(qǐng)求
- 關(guān)于Spring的統(tǒng)一功能處理(攔截器)實(shí)現(xiàn)
- Hadoop?MapReduce實(shí)現(xiàn)單詞計(jì)數(shù)(Word?Count)
- JDBC用IDEA連接SQLServer數(shù)據(jù)庫(kù)的超實(shí)用教程
- 詳解SpringBoot可執(zhí)行Jar包運(yùn)行原理
- 詳解Java中如何定義和訪問(wèn)靜態(tài)字段和方法
- Java通過(guò)Lambda表達(dá)式實(shí)現(xiàn)簡(jiǎn)化代碼
- 使用IDEA反編譯沒(méi)有擦除泛型的原因解析
- IDEA創(chuàng)建SpringBoot父子Module項(xiàng)目的實(shí)現(xiàn)方法
- springboot獲取項(xiàng)目目錄路徑的方法
- Java中局部變量和成員變量有什么區(qū)別