天天看点

Spring 框架学习 (一) Spring Bean 的初识初识 Spring Bean

文章目录

  • 初识 Spring Bean
    • 简介
      • 1. POJO & Java Bean
        • i) 什么是 POJO
        • ii) POJO 与 Java Bean 的区别
      • 2. Spring Bean
        • i) 控制反转 IoC
        • ii) 依赖注入 DI
    • Spring Bean 的简单引入

初识 Spring Bean

简介

1. POJO & Java Bean

i) 什么是 POJO

POJO(Plain Ordinary Java Object)简单的Java对象,实际就是普通JavaBeans,是为了避免和EJB混淆所创造的简称。

ii) POJO 与 Java Bean 的区别

POJO 和JavaBean是我们常见的两个关键字,一般容易混淆,POJO全称是Plain Ordinary Java Object / Pure Old Java Object,中文可以翻译成:普通Java类,具有一部分getter/setter方法的那种类就可以称作POJO,但是JavaBean则比 POJO复杂很多, Java Bean 是可复用的组件,对 Java Bean 并没有严格的规范,理论上讲,任何一个 Java 类都可以是一个 Bean 。但通常情况下,由于 Java Bean 是被容器所创建(如 Tomcat) 的,所以 Java Bean 应具有一个无参的构造器,另外,通常 Java Bean 还要实现 Serializable 接口用于实现 Bean 的持久性。 Java Bean 是不能被跨进程访问的。JavaBean是一种组件技术,就好像你做了一个扳子,而这个扳子会在很多地方被拿去用,这个扳子也提供多种功能(你可以拿这个扳子扳、锤、撬等等),而这个扳子就是一个组件。一般在web应用程序中建立一个数据库的映射对象时,我们只能称它为POJO。POJO(Plain Old Java Object)这个名字用来强调它是一个普通java对象,而不是一个特殊的对象,其主要用来指代那些没有遵从特定的Java对象模型、约定或框架(如EJB)的Java对象。理想地讲,一个POJO是一个不受任何限制的Java对象(除了Java语言规范)。

2. Spring Bean

i) 控制反转 IoC

控制反转(Inversion of Control,缩写为IoC),是面向对象编程中的一种设计原则,可以用来减低计算机代码之间的耦合度。其中最常见的方式叫做依赖注入(Dependency Injection,简称DI),还有一种方式叫“依赖查找”(Dependency Lookup)。通过控制反转,对象在被创建的时候,由一个调控系统内所有对象的外界实体,将其所依赖的对象的引用传递(注入)给它。

技术表现

Class A中用到了Class B的对象b,一般情况下,需要在A的代码中显式的new一个B的对象。采用依赖注入技术之后,A的代码只需要定义一个私有的B对象,不需要直接new来获得这个对象,而是通过相关的容器控制程序来将B对象在外部new出来并注入到A类里的引用中。而具体获取的方法、对象被获取时的状态由配置文件(如XML)来指定。

ii) 依赖注入 DI

依赖注入有如下实现方式:

  • 基于接口。实现特定接口以供外部容器注入所依赖类型的对象。
  • 基于 set 方法。实现特定属性的public set方法,来让外部容器调用传入所依赖类型的对象。
  • 基于构造函数。实现特定参数的构造函数,在新建对象时传入所依赖类型的对象。
  • 基于注解。基于Java的注解功能,在私有变量前加“@Autowired”等注解,不需要显式的定义以上三种代码,便可以让外部容器传入对应的对象。该方案相当于定义了public的set方法,但是因为没有真正的set方法,从而不会为了实现依赖注入导致暴露了不该暴露的接口(因为set方法只想让容器访问来注入而并不希望其他依赖此类的对象访问)。

Spring Bean 的简单引入

Bean 的创建方式有很多种,首先我们先从 xml 配置文件引入的方式入手

首先,创建一个 Java 类,这个类可以理解为创建 Bean 的一个模板。在正式生成 Bean 时,可以往里面注入不同的值。

在此,我先创建一个 Student 类,该类包含了 id,name, age,sex 等属性。

Sutdent 类
package cn.deu.just.demo1;

public class Student {    

     private int id;
     private String name;
     private int age;
     private boolean sex;


     public Student(int id, String name, int age, boolean sex) {
           super();
           this.id = id;
           this.name = name;
           this.age = age;
           this.sex = sex;
     }


     @Override
     public String toString() {
           return "Student [id=" + id + ", name=" + name + ", 
age=" + age + ", sex=" + sex + "]";
     }

}
           

在上述代码中,为其创建了一个带参的构造函数以便通过 XML 代码构造一个 Bean,和一个 toString 函数用以返回 Bean 中的值。

接下来我们需要通过 XML 来对 Bean 进行配置。

XML
<!-- 配置一个 Bean -->
     <bean id="student" class="cn.deu.just.demo1.Student">
           <constructor-arg name="id" value="19092701"></constructor-arg>
           <constructor-arg name="name" value="张三"></constructor-arg>
           <constructor-arg name="age" value="22"></constructor-arg>
           <constructor-arg name="sex" value="true"></constructor-arg>
     </bean>
           

在上述代码中:

  • id 是 Bean 的 id
  • class 是 Bean 使用的类
  • constructor-arg 对应带参构造参数的的参数列表
  • constructor-arg 的 name 代表的是参数名
  • constructor-arg 的 value 代表的是参数的值

然后我们就需要对 Bean进行测试

为此我们可以创建一个测试类

然后假如测试方法。

@Test
	public void Test1() {
		ApplicationContext ctx = new ClassPathXmlApplicationContext("BeanDemo1Context.xml");
		Student stu = (Student)ctx.getBean("student");
		System.out.println(stu);
	}
           

XML 中有着 Bean 的配置信息,这些信息连接着 Bean 的类,和 Bean 调用。这些包含着的信息,就可以称之为上下文。所以要使用 Bean,我们就先要知道 Bean 的上下文信息包含在哪一个文件中,然后从改文件中获取 Bean 的上下文信息。再然后就是从上下文中获取我们需要的 Bean。获取的 Bean 实际上也是一个类的对象,可直接调用函数。

运行结果
Student [id=19092701, name=张三, age=22, sex=true]