`

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 rmi 多接口配置 调用

    本篇文章将深入探讨如何在Spring框架中配置和调用RMI的多个接口。 首先,我们需要了解Spring RMI服务端的配置。服务端的核心在于创建RMI服务接口和其实现。在`SpringRmiServer.zip`中,我们通常会看到以下几个关键...

    CXF+spring+restful创建一个web的接口项目源代码

    在项目源代码中,你可能会看到以下几个关键部分: 1. **配置文件**:通常会有Spring的XML配置文件,这里会配置CXF的服务端点、数据源、事务管理等,以及RESTful服务的相关设置。 2. **服务接口**:定义了RESTful...

    spring 4 开发所需要的几个jar包

    本篇文章将详细讲解标题中提到的几个关键的jar包,包括它们的功能、用途以及如何在项目中整合使用。 首先,我们来关注Spring框架的核心jar包。Spring框架的核心组件是`spring-core.jar`,它提供了基础的IoC...

    spring简单模拟(面向抽象/接口编程)

    在Spring框架中,面向抽象编程体现在以下几个方面: 1. **依赖注入(DI)**:Spring的核心特性之一就是DI,它允许开发者声明性地配置组件间的依赖关系。在XML配置文件中,我们可以定义Bean的接口类型,而不是具体...

    初入spring的几个jar包

    这里提到的几个jar包是Spring框架的基础组件,对于初学者来说,理解它们的作用至关重要。 1. spring-core-5.0.2.RELEASE.jar:这是Spring框架的核心模块,包含了IoC(Inversion of Control,控制反转)和DI...

    springRMI接口实现

    在Spring RMI中,主要涉及以下几个关键概念和知识点: 1. **接口定义**:首先,你需要定义一个远程服务接口,这是客户端和服务器端共享的合同。这个接口声明了可供远程调用的方法。例如: ```java public ...

    spring2.5-中文API

    Spring 2.5版本相对于之前的版本,在功能上有了很大的增强,主要体现在以下几个方面: 1. **改进了对泛型的支持**:Spring 2.5增强了对泛型的支持,使得开发者可以更方便地利用泛型来编写类型安全的代码。 2. **...

    SpringCloud-使用路由网关统一访问接口示例代码.zip

    配置Zuul通常涉及到以下几个步骤: 1. 添加依赖:在`pom.xml`中,你需要引入`spring-cloud-starter-zuul`依赖,这样Spring Boot启动时就会自动加载Zuul的相关配置。 2. 配置路由:在`application.yml`或`...

    Spring_依赖注入_面向接口编程

    这样做有以下几个好处: 1. **降低耦合**:对象不再直接创建依赖,而是通过构造函数、setter方法或者注解来接收依赖,降低了类与类之间的耦合度。 2. **增强可测试性**:依赖注入使得我们可以轻松地替换对象的依赖...

    springAOP 4个jar包

    比如,`org.aopalliance.intercept.MethodInterceptor`接口定义了拦截器的接口,Spring AOP的`MethodBeforeAdvice`、`AfterReturningAdvice`等通知类型都实现了这个接口。 了解这些jar包的作用后,我们可以看到...

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

    下面我们将对 Spring 框架中的几个重要类和接口进行详细解析。 1. DataSource 接口 DataSource 接口是 javax.sql 包下的一个接口,它提供了一个方法 getConnection(),该方法用于获取数据库连接。Spring 框架支持...

    若依通用权限管理系统接口文档,是一个 Java EE 企业级快速开发平台,基于经典技术组合(Spring Boot、Spring

    在接口文档中,我们可以看到以下几个关键接口: 1. **验证码接口**(/captchaImage):提供图形验证码,用于用户登录验证,防止恶意登录。 2. **用户登录接口**(/login):接收用户名、密码和验证码,返回状态码、...

    spring的一个适合初学者的项目

    在Spring中,这通常涉及到以下几个关键知识点: 1. **Spring MVC**:Spring MVC是Spring框架的一部分,用于构建Web应用程序。在这个项目中,我们可能会看到Controller类,它们处理HTTP请求,并将数据传递给视图层...

    关于spring boot中几种注入方法的一些个人看法

    Spring Boot 中的几种注入方法 在 Spring Boot 中,注入是一种非常重要的机制,用于将 bean 对象注入到其他 bean 对象中,以便实现松耦合和高内聚的设计目标。下面我们将对 Spring Boot 中的几种注入方法进行详细的...

    spring mvc 接口

    本篇文档主要介绍了如何在 Spring MVC 中创建一个接口来返回 JSON 数据。下面我们将详细介绍整个过程: ##### 1. 项目结构 项目结构是开发过程中非常重要的部分,合理的结构有助于代码的组织和维护。对于 Spring ...

    Spring cloud spring boot spring boot admin

    这个项目通常由以下几部分组成: 1. **Spring Boot Admin Server**:这是核心服务,提供Web界面和API来展示监控信息。它依赖于`spring-boot-starter-admin-server`模块,并且需要配置Eureka或Consul等服务发现组件...

    spring spring security2.5 jar

    在整合Spring Security 2.5与Spring 2.5时,需要注意以下几点: 1. **依赖管理**:确保Spring Security的jar包与Spring Framework的版本兼容。在项目中正确引入这些jar包,通常通过Maven或Gradle的依赖管理来实现。...

    spring_day04

    这个接口的存在使得Spring能够适配多种底层的事务管理系统,如JDBC、Hibernate、JPA或者其他的ORM框架。通过实现`PlatformTransactionManager`,Spring可以灵活地在不同的事务策略间切换,无需改动事务管理的代码...

    hibernate和spring的几个小例子

    本篇文章将深入探讨这两个框架,并通过几个实际的小例子来帮助理解它们的使用方式。 首先,Hibernate是一个对象关系映射(ORM)框架,它简化了Java应用与数据库之间的交互。在传统的Java应用中,开发者需要编写大量...

    spring几种Dao支持配置

    以下将详细阐述Spring对DAO支持的几种配置方式: 1. **JDBC DAO支持:** Spring通过`JdbcTemplate`和`SimpleJdbcInsert`等类提供了对JDBC的抽象,减少了直接使用JDBC代码的繁琐性。`JdbcTemplate`提供了一组模板...

Global site tag (gtag.js) - Google Analytics