© 版权声明:本文为博主原创文章,转载请注明出处

@Bean

-@Bean标识一个用于配置和初始化一个由SpringIOC容器管理的新对象的方法,类似于XML配置文件的<bean/>

-可以在Spring的@Component注解的类中使用@Bean注解任何方法(仅仅是可以)

-在上一点中,通过使用的是@Configuration

实例

1.项目结构

2.pom.xml

  1. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  2. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  3.  
  4. <modelVersion>4.0.0</modelVersion>
  5.  
  6. <groupId>org.springbean</groupId>
  7. <artifactId>Spring-JavaBean</artifactId>
  8. <packaging>war</packaging>
  9. <version>0.0.1-SNAPSHOT</version>
  10. <name>Spring-JavaBean Maven Webapp</name>
  11. <url>http://maven.apache.org</url>
  12.  
  13. <properties>
  14. <spring.version>4.3.8.RELEASE</spring.version>
  15. </properties>
  16.  
  17. <dependencies>
  18. <!-- junit依赖 -->
  19. <dependency>
  20. <groupId>junit</groupId>
  21. <artifactId>junit</artifactId>
  22. <version>4.12</version>
  23. <scope>test</scope>
  24. </dependency>
  25. <!-- spring核心依赖 -->
  26. <dependency>
  27. <groupId>org.springframework</groupId>
  28. <artifactId>spring-core</artifactId>
  29. <version>${spring.version}</version>
  30. </dependency>
  31. <dependency>
  32. <groupId>org.springframework</groupId>
  33. <artifactId>spring-beans</artifactId>
  34. <version>${spring.version}</version>
  35. </dependency>
  36. <dependency>
  37. <groupId>org.springframework</groupId>
  38. <artifactId>spring-context</artifactId>
  39. <version>${spring.version}</version>
  40. </dependency>
  41. </dependencies>
  42.  
  43. <build>
  44. <finalName>Spring-JavaBean</finalName>
  45. </build>
  46.  
  47. </project>

3.spring-javabean.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xmlns:context="http://www.springframework.org/schema/context"
  5. xsi:schemaLocation="http://www.springframework.org/schema/beans
  6. http://www.springframework.org/schema/beans/spring-beans.xsd
  7. http://www.springframework.org/schema/context
  8. http://www.springframework.org/schema/context/spring-context.xsd">
  9.  
  10. <context:component-scan base-package="org.spring.javabean"/>
  11.  
  12. </beans>

4.Store.java

  1. package org.spring.javabean;
  2.  
  3. public interface Store {
  4.  
  5. }

5.StringStore.java

  1. package org.spring.javabean;
  2.  
  3. public class StringStore implements Store {
  4.  
  5. public void init() {
  6.  
  7. System.out.println("执行了init方法");
  8.  
  9. }
  10.  
  11. public void destroy() {
  12.  
  13. System.out.println("执行了destroy方法");
  14.  
  15. }
  16.  
  17. }

6.StoreConfig.java

  1. package org.spring.javabean;
  2.  
  3. import org.springframework.context.annotation.Bean;
  4. import org.springframework.context.annotation.Configuration;
  5.  
  6. @Configuration
  7. public class StoreConfig {
  8.  
  9. @Bean(name="stringStore", initMethod="init", destroyMethod="destroy")
  10. public Store stringStore() {
  11.  
  12. return new StringStore();
  13.  
  14. }
  15.  
  16. }

7.TestBase.java

  1. package org.spring.javabean.test;
  2.  
  3. import org.junit.After;
  4. import org.junit.Before;
  5. import org.springframework.context.support.ClassPathXmlApplicationContext;
  6. import org.springframework.util.StringUtils;
  7.  
  8. public class TestBase {
  9.  
  10. private ClassPathXmlApplicationContext context;
  11. private String springXmlPath;
  12.  
  13. /**
  14. * 无参构造器
  15. */
  16. public TestBase() {
  17.  
  18. }
  19.  
  20. /**
  21. * 含参构造器,初始化spring配置文件路径
  22. *
  23. * @param springXmlPath
  24. * spring配置文件路径
  25. */
  26. public TestBase(String springXmlPath) {
  27.  
  28. this.springXmlPath = springXmlPath;
  29.  
  30. }
  31.  
  32. /**
  33. * 初始化加载spring配置文件到IOC容器中
  34. */
  35. @Before
  36. public void before() {
  37.  
  38. if(StringUtils.isEmpty(springXmlPath)){
  39. springXmlPath = "classpath:spring-*.xml";
  40. }
  41. context = new ClassPathXmlApplicationContext(springXmlPath.split("[,\\s]+"));
  42. context.start();
  43.  
  44. }
  45.  
  46. /**
  47. * 销毁IOC容器
  48. */
  49. @After
  50. public void after() {
  51.  
  52. if(context != null){
  53. context.destroy();
  54. }
  55.  
  56. }
  57.  
  58. /**
  59. * 通过bean ID获取bean对象
  60. *
  61. * @param beanId
  62. * bean ID
  63. * @return
  64. */
  65. public Object getBean(String beanId) {
  66.  
  67. return context.getBean(beanId);
  68.  
  69. }
  70.  
  71. }

8.TestSpringJavaBean.java

  1. package org.spring.javabean.test;
  2.  
  3. import org.junit.Test;
  4. import org.spring.javabean.Store;
  5.  
  6. public class TestSpringJavaBean extends TestBase {
  7.  
  8. public TestSpringJavaBean() {
  9.  
  10. super("classpath:spring-javabean.xml");
  11.  
  12. }
  13.  
  14. @Test
  15. public void testJavaBean() {
  16.  
  17. Store store = (Store) super.getBean("stringStore");
  18. System.out.println(store.getClass().getName());
  19.  
  20. }
  21.  
  22. }

9.效果预览

参考:http://www.imooc.com/video/4033

Spring学习十一----------Bean的配置之基于Java的容器注解@Bean的更多相关文章

  1. Spring @Bean注解 (基于java的容器注解)

    基于java的容器注解,意思就是使用Java代码以及一些注解,就可以取代spring 的 xml配置文件. 1-@Configuration & @Bean的配合 @Configuration ...

  2. Spring课程 Spring入门篇 4-5 Spring bean装配之基于java的容器注解说明--@Bean

    1 解析 2.1 @bean注解定义 2.2 @bean注解的使用 2 代码演练 2.1 @bean的应用不带name 2.2 @bean的应用带name   2.3 @bean注解调用initMet ...

  3. Spring课程 Spring入门篇 4-7 Spring bean装配之基于java的容器注解说明--@Scope 控制bean的单例和多例

    1 解析 1.1 bean的单例和多例的应用场景 1.2 单例多例的验证方式 1.3 @Scope注解单例多例应用 2 代码演练 2.1 @Scope代码应用 1 解析 1.1 bean的单例和多例的 ...

  4. Spring课程 Spring入门篇 4-6 Spring bean装配之基于java的容器注解说明--@ImportResource和@Value java与properties文件交互

    1 解析 1.1 这两个注解应用在什么地方 1.2 应用方式 1.3 xml方式实现取值 2 代码演练 2.1 @ImportResource和@Value代码演练 1 解析 1.1 这两个注解应用在 ...

  5. Spring课程 Spring入门篇 4-8 Spring bean装配之基于java的容器注解说明--基于泛型的自动装配

    1 解析 1.1 什么是泛型? 1.2 泛型有什么作用? 1.3 泛型装配样式? 2 代码演练 2.1 泛型应用 1 解析 1.1 什么是泛型? Java泛型设计原则:只要在编译时期没有出现警告,那么 ...

  6. SpringMVC常用配置-Controller中的各种配置(基于Java API和注解)

  7. Spring核心技术(十一)——基于Java的容器配置(一)

    基本概念: @Bean和@Configuration Spring中新的基于Java的配置的核心就是支持@Configuration注解的类以及@Bean注解的方法. @Bean注解用来表示一个方法会 ...

  8. 从头认识Spring-2.4 基于java的标准注解装配-@Inject(2)-通过set方法或者其它方法注入

    这一章节我们来讨论一下基于java的标准注解装配标签@Inject是如何通过通过set方法或者其它方法注入? 在使用@Inject标签之前.我们须要在pom文件中面增加以下的代码: <depen ...

  9. 从头认识Spring-2.4 基于java的标准注解装配-@Inject-限定器@Named

    这一章节我们来讨论一下基于java的标准注解装配标签@Inject的限定器@Named. 1.domain 蛋糕类: package com.raylee.my_new_spring.my_new_s ...

随机推荐

  1. 星际转移(cogs 736)

    «问题描述: 由于人类对自然资源的消耗,人们意识到大约在2300 年之后,地球就不能再居住了.于是在月球上建立了新的绿地,以便在需要时移民.令人意想不到的是,2177 年冬由于未知的原因,地球环境发生 ...

  2. [CODEVS1205]单词反转

    给出一个英语句子,希望你把句子里的单词顺序都翻转过来 这个题算是第二次做了……第二次用的C++然而还是写不出来 思路1:用一个数组把读过去的单词存起来,再逆序输出即可 思路2:读入句子后,先在句子开头 ...

  3. xCode控制台的使用-应用闪退原因跟踪

    xCode控制台的使用-应用闪退原因跟踪 今天遇到这个一个问题,使用xCode version = 5.0 编译一个程序,刷到IOS7设备后,应用运行正常,但是刷新到IOS<7,打开饮用后就会出 ...

  4. 只能运行一个程序,禁止运行多个相同的程序 C#

    原文发布时间为:2009-04-06 -- 来源于本人的百度文章 [由搬家工具导入] Program.cs 里面改成如下: static void Main()        {            ...

  5. 【DirectX SDK Extra】提示缺少Qedit.h问题 (转)

    原文转自 http://blog.csdn.net/joeblackzqq/article/details/10944005 DirectX 9.0 SDK 开发包以及扩展包下载(February 2 ...

  6. 学习good taste代码

    Linux 的创始人,在采访中提及了关于代码的 “good taste”.Linus Torvalds 展示了一一些代码: void remove_list_entry(entry){ prev = ...

  7. MySql视图笔记(转载)

    1.       视图的定义 视图就是从一个或多个表中,导出来的表,是一个虚拟存在的表.视图就像一个窗口(数据展示的窗口),通过这个窗口,可以看到系统专门提供的数据(也可以查看到数据表的全部数据),使 ...

  8. 网络编程socket-SocketServer-FTP

    16章 网络编程?应该是讲网络之间如何编程来进行通信的章节 16.1.1 客户端/服务器架构?客户端请求访问,服务器端监听请求,处理请求,进行相应的模式16.1.2 客户端/服务器编程?服务器端:创建 ...

  9. 长安大学第四届“迎新杯”程序设计竞赛 H 圣诞节糖果【二分】

    时间限制:C/C++ 1秒,其他语言2秒空间限制:C/C++ 131072K,其他语言262144K64bit IO Format: %lld 题目描述 圣诞节临近,彩虹岛的黑心商人

  10. SpringBoot优雅的全局异常处理

    前言 本篇文章主要介绍的是SpringBoot项目进行全局异常的处理. SpringBoot全局异常准备 说明:如果想直接获取工程那么可以直接跳到底部,通过链接下载工程代码. 开发准备 环境要求 JD ...