Bean配置

简单记录-Java EE企业级应用开发教程(Spring+Spring MVC+MyBatis)-Spring中的Bean

什么是Spring中的Bean?

Spring可以被看作是一个大型工厂,这个工厂的作用就是生产和管理Spring容器中的Bean。如果想要在项目中使用这个工厂,就需要开发者对Spring的配置文件进行配置,配置的时候要在配置文件中告诉它需要哪些Bean,以及需要使用何种方式将这些Bean装配到一起。

提示: Bean的本质就是Java中的类,而Spring中的Bean其实就是对实体类的引用,来生产Java类对象,从而实现生产和管理Bean 。

Spring容器支持XML和Properties两种格式的配置文件,在实际开发中,最常使用的就是XML格式的配置方式。这种配置方式通过XML文件来注册并管理Bean之间的依赖关系。

使用XML文件的形式对Bean的属性和定义进行详细的讲解。

在Spring中,XML配置文件的根元素是, 中包含了多个子元素,每一个子元素定义了一个Bean,并描述了该Bean如何被装配到Spring容器中。元素中同样包含了多个属性以及子元素,其常用属性及子元素如表所示。

表元素的常用属性及其子元素



表中只介绍了元素的一些常用属性和子元素,实际上元素还有很多属性和子元素,我们可以到网上查阅相关资料进行获取。

在Spring的配置文件中,通常一个普通的Bean只需要定义id(或name)和class两个属性即可,定义Bean的方式如下所示。

  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. xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
  5. <!--将指定类配置给Spring,让Spring创建其对象的实例 -->
  6. <!-- 使用id 属性定义bean1,其对应的实现类为com.awen.instance.constructor.Bean1-->
  7. <bean id="bean1" class="com.awen.instance.constructor.Bean1"/>
  8. <!-- 使用name 属性定义bean1,其对应的实现类为com.awen.instance.static_factory.Bean2-->
  9. <bean name="bean2" class="com.awen.instance.static_factory.Bean2"
  10. </beans>

在上述代码中,分别使用id属性和name属性定义了两个Bean,并使用class元素指定其对应的实现类

注意:如果在Bean中未指定id和name,则Spring会将class值当作id使用。

  • 一般情况下,装配一个Bean时,通过指定一个id属性作为Bean的名称
  • id属性在IOC容器中必须是唯一的
  • 如果Bean的名称中含有特殊字符,就需要使用name属性

实例

1、复杂类型

  1. public class Address {
  2. private String address;
  3. public String getAddress() {
  4. return address;
  5. }
  6. public void setAddress(String address) {
  7. this.address = address;
  8. }
  9. }

2、真实测试对象

  1. public class Student {
  2. private String name;
  3. private Address address;
  4. private String[] books;
  5. private List<String> hobbies;
  6. private Map<String,String> card;
  7. private Set<String> games;
  8. private String wife;
  9. private Properties info;
  10. }

Address的对象address在Student类作为属性

3、beans.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. xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
  5. <bean id="address" class="com.kuang.pojo.Address"/>
  6. <bean id="student" class="com.kuang.pojo.Student">
  7. <!--第一种,普通值注入,value-->
  8. <property name="name" value="憨批"/>
  9. <!--第二种,Bean注入,ref-->
  10. <property name="address" ref="address"/>
  11. <!--数组注入-->
  12. <property name="books">
  13. <array>
  14. <value>红楼梦</value>
  15. <value>西游记</value>
  16. <value>水浒传</value>
  17. <value>三国演义</value>
  18. </array>
  19. </property>
  20. <!--List注入-->
  21. <property name="hobbies">
  22. <list>
  23. <value>听歌</value>
  24. <value>敲代码</value>
  25. <value>看电影</value>
  26. </list>
  27. </property>
  28. <!--Map-->
  29. <property name="card">
  30. <map>
  31. <entry key="身份证" value="1555555555"/>
  32. <entry key="银行卡" value="5555555555"/>
  33. </map>
  34. </property>
  35. <!--Set-->
  36. <property name="games">
  37. <set>
  38. <value>lol</value>
  39. <value>wow</value>
  40. </set>
  41. </property>
  42. <!--null-->
  43. <property name="wife">
  44. <null/>
  45. </property>
  46. <!--Properties-->
  47. <property name="info">
  48. <props>
  49. <prop key="driver">com.mysql.jdbc.Driver</prop>
  50. <prop key="url">jdbc:mysql://localhost:3306/news</prop>
  51. <prop key="root">root</prop>
  52. <prop key="password">123456</prop>
  53. </props>
  54. </property>
  55. </bean>
  56. </beans>

4、测试类

  1. public class MyTest {
  2. public static void main(String[] args) {
  3. ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
  4. Student student = (Student) context.getBean("student");
  5. System.out.println(student.getName());
  6. }
  7. }

【Spring】Spring中的Bean - 1、Baen配置的更多相关文章

  1. 7 -- Spring的基本用法 -- 5... Spring容器中的Bean;容器中Bean的作用域;配置依赖;

    7.5 Spring容器中的Bean 7.5.1 Bean的基本定义和Bean别名 <beans.../>元素是Spring配置文件的根元素,该元素可以指定如下属性: default-la ...

  2. 从Spring容器中获取Bean。ApplicationContextAware

    引言:我们从几个方面有逻辑的讲述如何从Spring容器中获取Bean.(新手勿喷) 1.我们的目的是什么? 2.方法是什么(可变的细节)? 3.方法的原理是什么(不变的本质)? 1.我们的目的是什么? ...

  3. Spring xml中进行面向切面的配置

    Spring xml中进行面向切面的配置 XML: <?xml version="1.0" encoding="UTF-8"?> <beans ...

  4. 7 -- Spring的基本用法 -- 4... 使用 Spring 容器:Spring 容器BeanFactory、ApplicationContext;ApplicationContext 的国际化支持;ApplicationContext 的事件机制;让Bean获取Spring容器;Spring容器中的Bean

    7.4 使用 Spring 容器 Spring 有两个核心接口:BeanFactory 和 ApplicationContext,其中ApplicationContext 是 BeanFactory ...

  5. SpringBoot 之 普通类获取Spring容器中的bean

    [十]SpringBoot 之 普通类获取Spring容器中的bean   我们知道如果我们要在一个类使用spring提供的bean对象,我们需要把这个类注入到spring容器中,交给spring容器 ...

  6. 获取Spring容器中的Bean协助调试

    在使用Spring进行开发时,有时调bug真的是很伤脑筋的一件事,我们可以通过自定义一个监听器来获取Spring容器中的Bean实例来协助我们调试. 第一步:编写自定义监听器 /** * 监听serv ...

  7. Spring Boot中普通类获取Spring容器中的Bean

    我们知道如果我们要在一个类使用spring提供的bean对象,我们需要把这个类注入到spring容器中,交给spring容器进行管理,但是在实际当中,我们往往会碰到在一个普通的Java类中,自己动手n ...

  8. Spring Boot中只能有一个WebMvcConfigurationSupport配置类

    首先将结论写文章的最前面,一个项目中只能有一个继承WebMvcConfigurationSupport的@Configuration类(使用@EnableMvc效果相同),如果存在多个这样的类,只有一 ...

  9. 【String注解驱动开发】如何按照条件向Spring容器中注册bean?这次我懂了!!

    写在前面 当bean是单实例,并且没有设置懒加载时,Spring容器启动时,就会实例化bean,并将bean注册到IOC容器中,以后每次从IOC容器中获取bean时,直接返回IOC容器中的bean,不 ...

  10. 【String注解驱动开发】面试官让我说说:如何使用FactoryBean向Spring容器中注册bean?

    写在前面 在前面的文章中,我们知道可以通过多种方式向Spring容器中注册bean.可以使用@Configuration结合@Bean向Spring容器中注册bean:可以按照条件向Spring容器中 ...

随机推荐

  1. mybaties 使用注解注入动态sql (if-else)-转义字符

    看到网上使用注解动态注入sql都是判断参数是否为空,我做项目的时候需要判断参数是否为字符串,需要对引号进行转义,所以把代码贴过来了. 注意:test表达式不能引用传入的参数,直接使用参数即可----- ...

  2. C++ 虚函数表与多态 —— 继承的虚函数表 & 内存布局

    1. 使用继承的虚函数表: 如果不涉及多重继承,每个类只有1个虚函数表,当子类继承父类后,子类可以自己改写和新增虚函数,如下图所示: 子类重写 func_1 后,子函数的 func_1 将会有新的逻辑 ...

  3. screw一键生成数据库文档

    1. 简介   在项目开发和交付阶段,数据库文档是必不可少的.对于大型项目多个数据库几百甚至几千张表来说,手写数据库文档必然是耗时且痛苦的.因此需要一个插件自动生成文档.   screw提供了多种文件 ...

  4. MySQL锁(一)全局锁:如何做全库的逻辑备份?

    数据库锁设计的初衷是处理并发问题,这也是数据库与文件系统的最大区别. 根据加锁的范围,MySQL里大致可以分为三种锁:全局锁.表锁和行锁.接下来我们会分三讲来介绍这三种锁,今天要讲的是全局锁. 全局锁 ...

  5. AWT04-AWT常用组件

    1.基本组件 方法名 说明 Button 按钮 Canvas 用于绘画的画布 Checkbox 复选框组件 CheckboxGroup 用于将多个Checkbox合成一组,一组Checkbox只有一个 ...

  6. 网站配置Gittalk教程和解决gittalk的Error: Not Found.问题

    想把网站增加gittalk的评论功能,按照其他教程配置后,出现了 Error: Not Found. 的错误.截图如下: 网上找了很多解决方案,现在贴出来完整的配置Gittalk的教程. 01.新建评 ...

  7. Numpy的学习5-array的分割

    import numpy as np A = np.arange(12).reshape((3, 4)) print(A) """ array([[ 0, 1, 2, 3 ...

  8. 4. 上新了Spring,全新一代类型转换机制

    目录 ✍前言 版本约定 ✍正文 PropertyEditor设计缺陷 新一代类型转换 Converter 代码示例 不足 ConverterFactory 代码示例 不足 GenericConvert ...

  9. Nginx-rtmp+ FFmpeg +Docker + vue.js 直播系统搭建

    思路(如图): 1,开启推流服务器(这里我的Nginx-rtmp服务器搭建成功) 进入docker 开启推流服务器  docker run -it -p 1935:1935 -p 8000:80 -- ...

  10. Python 微信公众号文章爬取

    一.思路 我们通过网页版的微信公众平台的图文消息中的超链接获取到我们需要的接口 从接口中我们可以得到对应的微信公众号和对应的所有微信公众号文章. 二.接口分析 获取微信公众号的接口: https:// ...