Spring入门学习笔记(2)——基于Java的配置
程序员文章站
2022-04-06 13:02:48
[TOC] 基于Java的配置 @Configuration & @Bean Annotations 使用@Configuration注释类表示,Spring IoC容器可以将该类用作bean定义的源。@Bean注释告诉Spring,用@Bean注释的方法将返回一个应该在Spring应用程序上下文中 ......
目录
基于java的配置
@configuration & @bean annotations
使用@configuration注释类表示,spring ioc容器可以将该类用作bean定义的源。@bean注释告诉spring,用@bean注释的方法将返回一个应该在spring应用程序上下文中注册为bean的对象。最简单的@configuration类如下所示:
package com.tutorialspoint; import org.springframework.context.annotation.*; @configuration public class helloworldconfig { @bean public helloworld helloworld(){ return new helloworld(); } }
它和以下的xml方式定义的是等价的:
<beans> <bean id = "helloworld" class = "com.tutorialspoint.helloworld" /> </beans>
带@bean的方法名作为bean id注释,他创建并返回实际的bean。一个配置类可以拥有多个bean的声明。一旦定义了配置类,你可以通过 annotationconfigapplicationcontex
加载并获取
他们。
public static void main(string[] args) { applicationcontext ctx = new annotationconfigapplicationcontext(helloworldconfig.class); helloworld helloworld = ctx.getbean(helloworld.class); helloworld.setmessage("hello world!"); helloworld.getmessage(); }
也可以获取加载不同的configuration
public static void main(string[] args) { annotationconfigapplicationcontext ctx = new annotationconfigapplicationcontext(); ctx.register(appconfig.class, otherconfig.class); ctx.register(additionalconfig.class); ctx.refresh(); myservice myservice = ctx.getbean(myservice.class); myservice.dostuff(); }
example
helloworldconfig.java
@configuration public class helloworldconfig { @bean public helloworld helloworld(){ return new helloworld(); } }
helloworld.java
public class helloworld { private string message; public void setmessage(string message){ this.message = message; } public void getmessage(){ system.out.println("your message : " + message); } }
mainapp.java
public class mainapp { public static void main(string[] args) { applicationcontext ctx = new annotationconfigapplicationcontext(helloworldconfig.class); helloworld helloworld = ctx.getbean(helloworld.class); helloworld.setmessage("hello world!"); helloworld.getmessage(); } }
输出:
your message : hello world!
注入bean依赖
当@ bean相互依赖时,表示依赖关系就像让一个bean方法调用另一个bean一样简单,如下所示
@configuration public class appconfig { @bean public foo foo() { return new foo(bar()); } @bean public bar bar() { return new bar(); } }
foo bean通过构造函数注入接收到bar的引用
example
texteditorconfig.java
@configuration public class texteditorconfig { @bean public texteditor texteditor(){ return new texteditor( spellchecker() ); } @bean public spellchecker spellchecker(){ return new spellchecker( ); } }
texteditor.java
public class texteditor { private spellchecker spellchecker; public texteditor(spellchecker spellchecker){ system.out.println("inside texteditor constructor." ); this.spellchecker = spellchecker; } public void spellcheck(){ spellchecker.checkspelling(); } }
spellchecker.java
public class spellchecker { public spellchecker(){ system.out.println("inside spellchecker constructor." ); } public void checkspelling(){ system.out.println("inside checkspelling." ); } }
mainapp.java
public class mainapp { public static void main(string[] args) { applicationcontext ctx = new annotationconfigapplicationcontext(texteditorconfig.class); texteditor te = ctx.getbean(texteditor.class); te.spellcheck(); } }
输出:
inside spellchecker constructor. inside texteditor constructor. inside checkspelling.
@import注解
@import
注解允许在一个configuration中导入另外一个配置类。
@configuration public class configa { @bean public a a() { return new a(); } }
@configuration @import(configa.class) public class configb { @bean public b a() { return new a(); } }
这样,只需要加载configb,则可以加载a,b两个配置文件,而不需要一样加载两次.
lifecycle callbacks(声明周期回调)
@bean注释支持指定任意的初始化和销毁回调方法,就像spring xml的init方法和销毁方法。
public class foo { public void init() { // initialization logic } public void cleanup() { // destruction logic } } @configuration public class appconfig { @bean(initmethod = "init", destroymethod = "cleanup" ) public foo foo() { return new foo(); } }
指定bean的作用域
默认作用域是singleton,可以通过以下方法重写:
@configuration public class appconfig { @bean @scope("prototype") public foo foo() { return new foo(); } }
上一篇: 一个基于python之外星人入侵小游戏
推荐阅读
-
java 学习笔记(入门篇)_java的安装与配置
-
java 学习笔记(入门篇)_java的基础语法
-
java 学习笔记(入门篇)_java的基础语法
-
Java学习笔记(5)--- Number类和Math 类,String类的应用,Java数组入门
-
java 学习笔记(入门篇)_java的安装与配置
-
01Spring基于xml的IOC配置--入门
-
spring cloud 入门系列七:基于Git存储的分布式配置中心--Spring Cloud Config
-
Spring学习笔记第二天,Spring基于xml或注解的IOC以及IOC的案例
-
Spring整合Struts 2与Hibernate(基于XML配置的S2SH整合)
-
Mule ESB 学习笔记(15)CXF SOAP基于JKS的验证的配置