- 浏览: 2308815 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (314)
- JAVA基础知识 (54)
- Java-IO/FIle (16)
- Java-JDBC (4)
- JAVA-新增特性-注解 (3)
- Java-枚举 (2)
- Java-泛型 (1)
- Java-多线程 (15)
- Java-XML (4)
- Java-JMS(消息服务) (4)
- Java-JVM (0)
- Web Service服务 (7)
- Jsp (10)
- js (18)
- Struts框架 (11)
- Spring框架 (29)
- Hibernate框架 (28)
- Spring Boot框架 (2)
- ExtJS前端框架 (29)
- Jquery js库 (8)
- JUnit框架 (8)
- Selenium 测试 (1)
- NoSql---Redis (6)
- ORACLE数据库 (45)
- MySQL数据库 (4)
- tomcat (3)
- Nginx反向代理服务器 (4)
- web应用服务器通用知识 (3)
- 开发工具IDE (14)
- UML建模 (1)
- SVN CVS 版本管理 (6)
- git 分布式版本管理 (4)
- 报表设计 (5)
- 文件上传下载 (2)
- 数据算法 (1)
- 存储过程 (5)
- JSON 相关 (1)
- OGNL表达式 (3)
- Util工具包 (9)
- 设计模式 (15)
- linux 相关 (3)
- life think (3)
- 工作流管理框架 (1)
- 大数据-Hadoop (1)
最新评论
-
huih:
很不错的文章
SpringMVC+Hibernate+Spring 简单的一个整合实例 -
calm01:
学习了.
Spring <bean>标签属性 Autowire自动装配(转载) -
lizhenlzlz:
我的也是拦截不了service层
SpringAOP拦截Controller,Service实现日志管理(自定义注解的方式)(转载) -
josh_123:
讲的不错,很详细,如果quartz定时任务类采用不继承任何类的 ...
Spring,jdk定时任务的几种实现以及任务线程是串行还是并行执行(转载) -
human_coder:
你知道eclipse调试怎么可以回调吗?有时候总是调快了,不能 ...
Debug---Eclipse断点调试基础
迄今为止,所接触到的Bean都是“无知觉”的,就像黑客帝国中机械工厂里面“养殖”的人类,他们虽然能完成一定的功能,但是根本不知道自己在工厂(BeanFactory)中的代号(id),或者自己是在哪个工厂(BeanFactory的引用)中沉睡。所以,本节的目的就是要创造出一个尼奥一样的Bean,让他知道自己在工厂中的id和自己原来躺在哪个工厂中。这里,称之为,Bean对Spring有知觉。
但是有言在先,如果要在Spring容器中做到这两点,当然,可以自己通过某些方法实现,代价是大量冗余代码,好处是跟Spring解耦。如果使用Spring提供的接口,好处当然减少代码的规模,“缺点”(如果算的话)是与Spring耦合。总之,无论采取那种办法还是要看实际需要。
/////////////////////
让Bean对Name有知觉
/////////////////////
让Bean对Name有知觉
/////////////////////
作用:让Bean获取自己在BeanFactory配置中的名字(根据情况是id或者name)。
实现:通过实现BeanNameAware接口,接口中就一个方法setBeanName()
例程如下(P100,代码清单5-11,部分)
public class LogginBean implements BeanNameAware {
private String beanName = null;
public void setBeanName(String beanName) {
this.beanName = beanName;
}
}
public class LogginBean implements BeanNameAware {
private String beanName = null;
public void setBeanName(String beanName) {
this.beanName = beanName;
}
}
额外说明:
Spring自动调用。并且会在Spring自身完成Bean配置之后,且在调用任何Bean生命周期回调(初始化或者销毁)方法之前就调用这个方法。换言之,在程序中使用BeanFactory.getBean(String beanName)之前,Bean的名字就已经设定好了。所以,程序中可以尽情的使用BeanName而不用担心它没有被初始化。
当然,Bean之中一定要有个String类型变量来保存BeanName的值,这个是在编写Bean代码时有程序员手工完成的,而不是通过什么特殊的饿配置。
通常都是为了更好的饿配置Log,但是请注意,不要只是因为配合Log就把bean那么中添加任何业务含义,否则会让你自己的类关联到某个Spring特性上去,而它带来的好处却是微不足道的。如果确实需要Bean带有某种内部名称,那么最好让Bean自己实现某个方法,例如setName(),然后使用DI给每个Bean注入一个名字,这样技能保持配置Bean的名字仍然能够简洁,且你也无需修改自己的配置文件,好让Bean的名字带有业务含义。
////////////////////////////////
让Bean对工厂有知觉
////////////////////////////////
让Bean对工厂有知觉
////////////////////////////////
作用:让Bean获取配置他们的BeanFactory的引用。
实现:实现BeanFactoryAware接口,其中只有一个方法即setFactory(BeanFactory factory)。使用上与BeanNameAware接口无异,只不过BeanFactoryAware注入的是个工厂,BeanNameAware注入的是个Bean的名字。
额外说明:
虽然原书中并未提及setFactory()方法的调用时机,但是可以猜想到,这个方法可能是在根据某个配置文件创建了一个新工厂之后,Spring才调用这个方法,并把BeanFactory注入到Bean中。
让bean获取配置自己的工厂之后,当然可以在Bean中使用这个工厂的getBean()方法,但是,实际上非常不推荐这样做,因为结果是进一步加大Bean与Spring的耦合,而且,能通过DI注入进来的尽量通过DI来注入。
当然,除了查找bean,BeanFactory可以提供大量其他的功能,例如销毁singleton模式的Bean。
补充说明:
factory.preInstantiateSingletons();方法。preInstantiateSingletons()方法立即实例化所有的Bean实例,有必要对这个方法和Spring加载bean的机制做个简单说明。
factory.preInstantiateSingletons();方法。preInstantiateSingletons()方法立即实例化所有的Bean实例,有必要对这个方法和Spring加载bean的机制做个简单说明。
方法本身的目的是让Spring立即处理工厂中所有Bean的定义,并且将这些Bean全部实例化。因为Spring默认实例化Bean的情况下,采用的是lazy机制,换言之,如果不通过getBean()方法(BeanFactory或者ApplicationContext的方法)获取Bean的话,那么为了节省内存将不实例话Bean,只有在Bean被调用的时候才实例化他们。
发表评论
-
初探RestTemplate--postForObject方法直接传递对象(转载)
2020-05-01 10:22 1232https://blog.csdn.net/mryang125 ... -
Spring Boot 使用JdbcTemplate(转)
2017-03-08 15:04 1960原文地址:http://blog.csdn.net/liu ... -
使用 Spring Data JPA 简化 JPA 开发(转载)
2015-08-18 16:32 1845从一个简单的 JPA 示例开始 本文主要讲述 Spring ... -
SpringAOP拦截Controller,Service实现日志管理(自定义注解的方式)(转载)
2015-08-14 16:26 10576首先我们为什么需要做日志管理,在现实的上线 ... -
spring配置datasource的三种方式(转载)
2015-04-09 15:04 44991、使用org.springframework ... -
web应用程序和它之中的线程问题(转载)
2015-02-09 16:19 3202原文地址:http://coach.iteye.com/b ... -
spring 和rmi 的整合(转载)
2015-02-04 12:41 5315远程调用有很多种,例如: 1)远程方法调用(RMI) 2) ... -
springmvc和struts2的区别(转载)
2014-11-26 15:52 8414我们用struts2时采用的传统的配置文件的方式,并没有使 ... -
servlet/filter/listener/interceptor区别与联系(转)
2014-11-26 15:34 5335一、概念: 1、servlet: ... -
使用JUnit4测试Spring(转)
2014-07-07 18:16 11288Spring环境下的JUnit4测试 1,下载所需jar包 ... -
Spring TestContext测试框架
2014-07-07 17:21 3383直接使用Junit测试Spring程序存在的不足... 1 ... -
SpringMVC+Hibernate+Spring 简单的一个整合实例
2014-07-04 16:14 87778SpringMVC又一个漂亮的web框架,他与Struts2 ... -
Struts2、hibernate和spring下载,整合所需jar包
2014-07-04 16:00 4458ssh三个框架各自所有版本下载地址如下 Struts f ... -
Spring事务配置的五种方式(转载)
2014-06-04 11:45 2282前段时间对Spring的事务配置做了比较深入的研究,在此之 ... -
Spring,jdk定时任务的几种实现以及任务线程是串行还是并行执行(转载)
2014-03-31 17:20 12227近日项目开发中需要执行一些定时任务,比如需要在每天凌晨时候 ... -
Spring <bean>标签属性 Autowire自动装配(转载)
2014-03-31 11:21 11556在应用中,我们常常使 ... -
spring3.0注解
2013-07-29 15:39 11621.使用 @Repository、@Servi ... -
spring 抽象bean及继承(模板)
2013-07-22 17:39 15041我们在应用Spring时,在一般的设计时,肯定要用的抽象类。 ... -
Spring 定义:abstract="true" ,可适用模板
2013-07-22 17:22 2945Spring 定义:abstract="true ... -
Spring与Hibernate集成中的session问题
2013-04-15 15:53 31611.通过getSession()方法 ...
相关推荐
7. **BeanNameAware**:最后,BeanNameAware接口允许Bean知道它在Spring容器中的唯一标识(ID或名称)。当Bean实现`setBeanName(String name)`方法,Spring会在初始化过程中将Bean的名称传递给Bean,这对于某些需要...
3. 处理BeanNameAware和BeanFactoryAware接口:如果Bean实现了BeanNameAware或BeanFactoryAware接口,Spring会调用相应的方法,将Bean的ID和BeanFactory设置到Bean中。 4. BeanPostProcessor的前置处理:在Bean的...
BeanFactoryAware接口提供了一个方法`setBeanFactory(BeanFactory beanFactory)`,允许bean获取到当前的BeanFactory实例。这样,bean就能在运行时动态地查找和依赖其他bean,或者利用BeanFactory提供的功能,如工厂...
com-spring-ioc-demo:源码主要是学习Spring IOC的原理,以及对Bean的注册及控制,主要运用以下类对Spring进行扩展学习:BeanPostProcessor,BeanFactoryAware,BeanNameAware,ApplicationContextAware,FactoryBean...
10. **Aware接口**:Spring提供了一系列的Aware接口,如BeanNameAware、BeanFactoryAware和ApplicationContextAware,这些接口使得Bean可以在运行时获取自身的一些信息,例如Bean的名字、所处的Bean工厂或...
- Spring容器的生命周期包括对象实例化、属性设置、接口回调(如`BeanNameAware`、`BeanFactoryAware`等)以及初始化和销毁方法的调用。 6. Spring生命周期的11步: - 对象实例化:创建Bean对象。 - 属性封装:...
- Aware接口:包括BeanNameAware、BeanClassLoaderAware、BeanFactoryAware、EnvironmentAware、EmbeddedValueResolverAware和ApplicationContextAware等。这些接口允许Bean获取容器的相关信息,如Bean的名称、类...
- 如果Bean实现了特定的Spring接口,如`BeanNameAware`,`BeanFactoryAware`,`ApplicationContextAware`,Spring会在适当的时间调用相应的方法。 - `BeanNameAware`的`setBeanName()`方法用于将Bean的ID传递给...
1. **低侵入式设计**:Spring 通过接口和注解来管理对象,允许应用代码与框架保持松散耦合,降低了对第三方库的过度依赖。 2. **依赖注入**:Spring 提供的 DI 机制允许开发者在运行时通过配置文件或注解来管理对象...
3. **Bean接口回调**:如果Bean实现了特定的接口,如`BeanNameAware`、`BeanFactoryAware`或`ApplicationContextAware`,Spring会在适当的时候调用对应的回调方法。这些接口允许Bean获取其ID、BeanFactory引用或...
此外,bean可以实现特定接口(如BeanNameAware、BeanFactoryAware、ApplicationContextAware)以参与到生命周期的不同阶段。还有BeanPostProcessor接口,它的方法会在bean初始化前后被调用。当bean不再需要时,可以...
在上面的代码中,我们定义了一个Person类,它实现了BeanNameAware和BeanFactoryAware接口。通过这两个接口,我们可以获取当前bean的名称和工厂。 ``` public class Person implements BeanNameAware, ...
在这个过程中,Spring容器提供了多个关键接口和回调方法,使得开发者能够自定义Bean的行为。 首先,BeanFactory是Spring中最基础的容器,它负责Bean的实例化。在BeanFactory中,Bean的生命周期主要涉及以下接口: ...
- 编写Mapper接口和XML映射文件。 - 配置Spring Boot的DataSource和SqlSessionFactory。 - 使用@Autowired注入Mapper接口,实现数据库操作。 11. **Spring Cloud服务注册与发现** Spring Cloud使用Eureka或...
5. **BeanFactoryAware 接口回调**:如果该 Bean 实现了 `BeanFactoryAware` 接口,Spring 将 BeanFactory 传递给 `setBeanFactory()` 方法。 6. **调用 BeanPostProcessor.postProcessBeforeInitialization 方法**...
- Bean的生命周期过程包括实例化、属性赋值、BeanNameAware和BeanFactoryAware接口方法调用、BeanPostProcessor接口方法调用、InitializingBean和DisposableBean接口方法调用等。 5. Spring的属性注入: Spring...
- **BeanFactoryAware**:该接口的`setBeanFactory`方法会被Spring容器回调,将当前的`BeanFactory`实例传递给bean,便于bean访问容器内的其他bean。 - **ApplicationContextAware**:此接口的`...
Spring 框架生命周期和 Bean 实例化过程 Spring 框架是一个非常流行的 Java Web 应用...同时,init-method 和 destroy-method 属性、BeanPostProcessor 接口也是非常重要的概念,它们可以用来动态扩展和修改 Bean。
在上面的代码中,我们可以看到DefaultListableBeanFactory是如何忽略某些依赖接口的,它忽略了BeanNameAware、BeanFactoryAware、BeanClassLoaderAware等依赖接口,这些依赖接口是Spring中提供的一个重要特性。...