Spring的一些标签说明

时间:2022-06-27 16:04:57

1、alias 标签:

作用:为已配置的 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
 5         http://www.springframework.org/schema/beans/spring-beans.xsd">
 6         
 7     <bean id="user" name="test" class="cn.mgy.entity.User"/>
 8     
 9     <!-- 
10         标签alias: 为已配置的bean设置别名
11             属性name: 必要属性, 代表为哪一个bean配置别名, 
12                 此属性的值为其他bean标签的id或name属性值
13             属性alias: 必要属性, 代表新命名的别名是什么
14      -->
15     <alias name="user" alias="user1"/>
16             
17 </beans>

测试代码:

 1 import org.springframework.context.ApplicationContext;
 2 import org.springframework.context.support.ClassPathXmlApplicationContext;
 3 
 4 import cn.mgy.entity.User;
 5 
 6 public class Test {
 7     public static void main(String[] args) {
 8         // 读取Spring配置文件
 9         ApplicationContext context = new ClassPathXmlApplicationContext(
10                 "applicationContext.xml");
11 
12         // 通过id获取User对象
13         User user = (User) context.getBean("user");
14         // 测试对象
15         System.out.println(user);
16         System.out.prntln("=====================================");
17         // 通过alias获取User对象
18         user = (User) context.getBean("user1");
19         // 测试对象
20         System.out.println(user);
21     }
22 }

2、bean 标签的配置:

  bean 标签的作用:用于声明一个类,在启动 Spring 框架的时候根据该配置的类创建对象到容器里面。

  属性说明:

 1 <!-- <bean>标签:用于声明一个类,在启动Spring框架的时候根据该配置的类创建对象到容器里面
 2          name:设置对象名(唯一标识符)
 3          id:设置对象名(唯一标识符,功能和name一样)
 4          class:用于指定对象对应的类名,如果不是实现类必须要将bean声明为抽象的!!!
 5          scope:用于设置的对象的作用范围,可选参数如下:
 6             *singleton:单例(默认)
 7                 对象出生:当程序加载配置文件创建容器时,创建
 8                 对象活着:只要容器还在,一直活着
 9                 对象死亡:应用停止,容器销毁,对象死亡
10             *prototype:多例(原型对象)
11                 对象出生:当程序加载配置文件创建容器时,创建,(每次调用会创建一个新对象)
12                 对象活着:只要对象被使用,一直活着
13                 对象死亡:对象长时间不用,会被Java垃圾回收机制回收 (该对象不被容器管理)
14             *reqeust:web项目中,Spring将创建的对象放在request作用域中
15             *session:web项目中,Spring将创建的对象放在session作用域中
16         init-method:设置创建对象的时候,调用初始化方法
17         destroy-method:设置对象被回收时,调用注销的方法
18         
19       -->
20     <bean name="customerServiceImpl"  class="cn.mgy.service.impl.CustomerServiceImpl"></bean>

3、实例化 Bean 的四种方式:

(1)通过 class 直接创建

   1 <bean name="customerService" class="cn.mgy.service.CustomerService"> 

(2)通过静态方法工厂创建

 1 package cn.mgy.factory;
 2 
 3 import cn.mgy.service.CustomerService;
 4 
 5 public class CreateFactory {
 6 
 7     /**
 8      * 使用一个静态工厂类,通过字符串创建一个对象
 9      * 
10      * @param className
11      * @return
12      */
13     public static Object create() {
14 
15         return new CustomerService();
16 
17     }
18 
19 }
1 package cn.mgy.factory;
2 public class CustomerService {
3      void say();  
4 }
1 package cn.mgy.factory;
2 
3 
4 public class CustomerServiceImpl implements CustomerService {
5         @Override
6          public void say() {
7                 System.out.println("你好世界!");
8          }    
9 }

  静态工厂配置:

1  <bean name="customerService" factory-method="create" class="cn.mgy.factory.CreateFactory">
2      <property name="customerDAO" ref="customerDAOImpl"></property>
3  </bean>

  (3)通过实体工厂创建

  实体工厂,注意 create 方法没有 static

 1 package cn.mgy.factory;
 2 
 3 import cn.mgy.service.CustomerService;
 4 
 5 public class CreateFactory {
 6 
 7     /**
 8      * 使用一个静态工厂类,通过字符串创建一个对象
 9      * 
10      * @param className
11      * @return
12      */
13     public  Object create() {
14 
15         return new CustomerService();
16 
17     }
18 
19 }

  配置方式:

1 <?xml version="1.0" encoding="UTF-8"?>
2 <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd ">
3    <bean  name="customerDAOImpl" class="cn.mgy.dao.impl.CustomerDAOImpl"></bean>
4    <!--非静态的方法,必须需要对象来调用,所以必须要创建工厂类的对象 -->
5    <bean name="createFactory" class="cn.mgy.factory.CreateFactory" ></bean>
6    <bean name="customerService" factory-method="create" factory-bean="createFactory" >
7      <property name="customerDAO" ref="customerDAOImpl"></property>
8    </bean>
9 </beans>

  (4)内置 FactoryBean 工厂创建对象的实现

    Spring 支持一种通过实现 FactoryBean 的接口创建工厂类对象。必须返回泛型指定的类型对象。

 1 public class HelloWorldServiceFactory implements FactoryBean<HelloWorldService> {
 2 
 3     /**
 4      * 返回创建的对象
 5      */
 6     @Override
 7     public HelloWorldService getObject() throws Exception {
 8         return new HelloWorldService();
 9     }
10 
11     /**
12      * 返回对象的类型
13      */
14     @Override
15     public Class<?> getObjectType() {
16         return HelloWorldService.class;
17     }
18 
19     /**
20      * 是否是单例,如果是true ,否则就是false
21      */
22     @Override
23     public boolean isSingleton() {
24         return false;
25     }
26     
27 }

  调用代码:

 1 package cn.mgy.test;
 2 
 3 import org.junit.Test;
 4 import org.springframework.beans.BeansException;
 5 import org.springframework.context.support.ClassPathXmlApplicationContext;
 6 
 7 import cn.mgy.service.HelloWorldService;
 8 
 9 public class HelloWorldTest {
10     
11     @Test
12     public void say() {
13     
14             try {
15                 //Spring框架的路径格式:如果从包里面开始读取的路径,使用classpath开始
16                 ClassPathXmlApplicationContext applicationContext=new ClassPathXmlApplicationContext("classpath:applicationContext.xml");
17                 //对象名必须要和配置的对象名一一对应
18                 HelloWorldService helloWorldService = applicationContext.getBean("helloWorldService", HelloWorldService.class);
19                 helloWorldService.say();
20                 applicationContext.close();
21             } catch (BeansException e) {
22                 // TODO Auto-generated catch block
23                 e.printStackTrace();
24             }
25     
26     }
27 
28 }

  FactoryBean 创建对象的应用场景,有这么一种情况,创建好的对象可以设置很多需要的参数再返回。如果我们创建一个对象需要设置很多参数的话,我们可以通过一个工厂类创建对象,这样就可以设置很多的参数。这样也就实现了将参数和对象打包了。

  我们经常看见框架整合的时候,会看到 FactoryBean 接口创建对象。因为框架调用的时候经常涉及参数与对象绑定在一起,所以使用 FactoryBean 接口创建对象。