`

Spring的几个接口

阅读更多

  备注:Aware接口spring标记接口 表示spring的回调

 

  1. org.springframework.beans.factory.FactoryBean
    	/**
    	 * 调用getBean()时spring容器每次返回 getObject()方法的返回值
    	 *
    	 */
    	public class Factory implements FactoryBean<Test1> {
    
    		@Override
    		public Test1 getObject() throws Exception {
    			return new Test1();
    		}
    
    		@Override
    		public Class<?> getObjectType() {
    			return Test1.class;
    		}
    
    		@Override
    		public boolean isSingleton() {
    			return false;
    		}
    
    	}
      
               <!-- 屌用Factory实例,context.getBean("&t3") -->
    	<bean id="t3" class="i.test.Factory"/>
     
  2. org.springframework.beans.factory.BeanNameAware
    	/**
    	 * 得到配置文件中,id的名字
    	 *
    	 */
    	public class Test3 implements BeanNameAware {
    		private String name;
    
    		@Override
    		public void setBeanName(String name) {
    			this.name = name;
    		}
    	}
      
    	<!-- 可以直接在Test3中使用这个id -->
    	<bean id="t3" class="i.test.Test3" />
      
  3. org.springframework.beans.factory.InitializingBean
    	public class Test3 implements InitializingBean {
    
    		public void setName(String name) {
    			System.out.println("-----" + name);
    		}
    
    		/**
    		 * 属性初始化后调用该方法
    		 */
    		@Override
    		public void afterPropertiesSet() throws Exception {
    			//
    			System.out.println("-----");
    		}
    	}
      
    	<bean id="t3" class="i.test.Test3" p:name="name"/>
    	
    	<!-- 在没有实现上面接口时,可以通过下面配置实现同样效果 -->
    	<bean id="t3" class="i.test.Test3" p:name="name" init-method="afterPropertiesSet"/>
     
  4. org.springframework.beans.factory.DisposableBean
    	public class Test3  implements DisposableBean{
    
    		public void setName(String name) {
    			System.out.println("-----"+name);
    		}
    
    		/**
    		 * 对象被销毁时调用的方法,
    		 * 单例模式bean与spring容器有相同的生命周期
    		 */
    		@Override
    		public void destroy() throws Exception {
    			//
    			System.out.println("-----");
    			
    		}
    	}
      
    	<bean id="t3" class="i.test.Test3" p:name="name" />
    
    	<!-- 在没有实现上面接口时,可以通过下面配置实现同样效果 -->
    	<bean id="t3" class="i.test.Test3" p:name="name" destroy-method="destroy" />
     
    		AbstractApplicationContext context = new ClassPathXmlApplicationContext("Beans.xml");
    		// 让容器关闭时回调
    		context.registerShutdownHook();
     
  5. import org.springframework.context.ApplicationContextAware
    public class Test3 implements ApplicationContextAware {
    
    	private ApplicationContext context;
    
    	/**
    	 * 通过容器初始化对象
    	 */
    	public Test1 getTest1() {
    		return context.getBean("t1", Test1.class);
    	}
    
    	/**
    	 * 可以得到spring容器
    	 */
    	@Override
    	public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
    		this.context = applicationContext;
    	}
    
    }
    
     
    	<bean id="t1" class="i.test.Test1" scope="prototype" />
    	<bean id="t3" class="i.test.Test3"  />
     
  6. Lookup method injection(可作为上面功能的简单实现版)
    public abstract class Test3 {
    
    	/**
    	 * 要求每次反回一个新的Test1实例
    	 */
    	public abstract Test1 getTest1();
    
    	@Override
    	public String toString() {
    		System.out.println(getTest1());
    		return "";
    	}
    
    }
    
     
    	<bean id="t1" class="i.test.Test1" scope="prototype" />
    	<bean id="t3" class="i.test.Test3">
    		<!-- Spring框架通过使用CGLIB字节码生成工具,动态库生成的子类重写方法实现。 cglib这个包在spring3.2被集成进来 -->
    		<lookup-method name="getTest1" bean="t1" />
    	</bean>
           cglib是针对类来实现代理的,他的原理是对指定的目标类生成一个子类,并覆盖其中方法实现增强,但因为采用的是继承,所以不能对final修饰的类进行代理,java自带的代理类工具proxy(被代理类必须要实现接口)
    		ApplicationContext context = new ClassPathXmlApplicationContext("Beans.xml");
    		System.out.println(context.getBean("t3"));
    		//i.test.Test3$$EnhancerByCGLIB$$86e9bbc0@f1afec5
     
分享到:
评论

相关推荐

    spring的几个重要类和接口(详解)

    下面小编就为大家带来一篇spring的几个重要类和接口(详解)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    Spring_Framework_ API_5.0.5 (CHM格式)

    Spring5 是一个重要的版本,距离Spring...随着 Java、JavaEE 和其他一些框架基准版本的增加,SpringFramework5 取消了对几个框架的支持。例如: Portlet Velocity JasperReports XMLBeans JDO Guava

    高级开发spring面试题和答案.pdf

    传播特性有几种?7种; 某一个事务嵌套另一个事务的时候怎么办? REQUIRED_NEW和REQUIRED区别 Spring的事务是如何回滚的,实现原理; 抽象类和接口的区别,什么时候用抽象类什么时候用接口; StringBuilder和...

    Spring MVC入门教程

    十六、spring mvc 关于写几个配置文件的说明 十七、spring mvc 如何取得Spring管理的bean 十八、spring mvc 多视图控制器 十九、 &lt;mvc:annotation-driven /&gt; 到底做了什么工作 二十、 本文中springMVC.xml配置文件是...

    Spring AOP代理详细介绍

    如果一个类实现了一个或多个接口,那么Spring就会使用默认的JDK动态代理,如果没有实现任何接口,就会使用cglib来代理。当然我们也可以手动改变这些设置。这也是比较容易掉坑的部分,如果设置错了代理方式,那么在...

    spring+springmvc+mybatis的整合

    前段时间,分开学习了这三个框架,都是看某黄埔军校的视频,整合的部分没看视频,想自己做。...2.8 到这里,配置文件就写完了,这里注意的是,java代码没开始写,只是定义了几个包,dao\service\beans

    Spring基础与快速入门

    所谓全方位,不得不说以下几个特点: 1 非侵入式:对于写代码从来不考虑复用和移植的程序员来说,这一点根本就没有吸引力,那么请跳过。所谓非侵入式是指Spring框架的API不会在业务逻辑上出现,也就是说我们的业务...

    Spring MVC 教程 快速入门 深入分析

    Spring MVC 教程 快速入门 深入分析 ...十六、spring mvc 关于写几个配置文件的说明 十七、spring mvc 如何取得Spring管理的bean 十八、spring mvc 多视图控制器 十九、 &lt;mvc:annotation-driven /&gt; 到底做了什么工作

    新版本SpringCloud2学习手册

    传统的API文档编写存在以下几个痛点: 66 Swagger具有以下优点 66 Swagg er 2.0 集成配置 66 Maven依赖信息 66 SwaggerConfig 68 Zull整合Swagger管理微服务所有API 68 会员和订单引入Maven依赖 68 ...

    Spring.net框架

    解决这个问题的办法就是“针对抽象(接口)”编程 (依赖倒置原则)。这里的抽象既包括抽象类也包括接口。我不想过多的去谈抽象类和接口的区别,在后续的例子中我们将使用接口。由于接口在进行“动态代理” 时仍能...

    Spring Cloud 阶段性开发与测试

    本代码的主要内容为 Spring Cloud 阶段性开发与测试的源码包,主要分为以下几个模块: 001-项目基础模块; 002-接入Eureka注册中心以及Eureka集群; 003-接入Ribbon负载均衡客户端组件; 004-接入Feign负载均衡...

    spring为ApplicationContext提供的3种实现分别为:ClassPathXmlApplicationContext

    NULL 博文链接:https://canfly2010.iteye.com/blog/443063

    SpringMVC框架架构介绍

    十六、spring mvc 关于写几个配置文件的说明 十七、spring mvc 如何取得Spring管理的bean 十八、spring mvc 多视图控制器 十九、 &lt;mvc:annotation-driven /&gt; 到底做了什么工作 二十、 本文中springMVC.xml配置文件...

    springmybatis

    下面对这几个配置文件解释下: 1.Configuration.xml 是 mybatis 用来建立 sessionFactory 用的,里面主要包含了数据库连接相关东西,还有 java 类所对应的别名,比如 ...

    JAVA Spring框架实现登陆查询 完整搭建框架方法的word文档 包含mysql文件

    如果有同学自己建立的话,可以按照以下几个步骤建立 1 配置web表头 2 配置加载spring-mybatis.xml 3 配置编码过滤器 4 配置加载sping-mybaties文件所需要的类 5 配置处理javabean类销毁的类 6 ...

    Spring boot整合MinIO客户端实现文件管理

    它兼容亚马逊S3云存储服务接口,非常适合于存储大容量非结构化的数据,例如图片、视频、日志文件、备份数据和容器/虚拟机镜像等,而一个对象文件可以是任意大小,从几kb到最大5T不等。 本项目集成Minio的java客户端...

    Java spring 21万字入门

    原生的web项目开发过程都是上面这样,和业务相关的其实只有第2步,而其他几个步骤是每个web项目都需要的,像比较大的项目,会有很多web模块,每个模块都需要重复这些1/3/4操作步骤,还是相当繁琐的,也会耗费大量...

    Spring+myBatis 整合两种方法,一种是dao 整合,一种是mapper接口代理

    需要数据库,可以自行建立,建立一个tb_user 表,表中主要有id ,username loginname,password,phone,address几个字段。

    Spring框架生态流程框架图-执行运行路程图

    执行Spring框架的运行路程通常包括以下几个重要的步骤: 应用程序启动:应用程序启动时,Spring框架会加载并初始化所需的配置文件和类。 配置加载:Spring框架会读取并加载应用程序的配置文件,例如XML配置文件或...

    基于Spring Boot搭建医院信息管理系统(HIS)毕业设计实现

    基于Spring Boot搭建医院信息管理系统(HIS)的过程可以分为以下几个步骤: 需求分析: 首先,您需要分析医院信息管理系统的需求,例如患者管理、医生管理、挂号、门诊、住院、药品管理、检查检验、收费结算等功能。...

Global site tag (gtag.js) - Google Analytics