bean

@Bean 指定初始化和销毁方法

时光毁灭记忆、已成空白 提交于 2020-03-05 18:33:59
bean 的生命周期    bean 的创建 --> 初始化 --> 销毁 ioc 容器管理 bean 的声明周期    可以自定义初始化和销毁方法 构造器( 对象创建 )被调用时机    单实例:在容器启动的时候创建对象    多实例:在每次获取的时候创建对象 初始化方法被调用时机    单实例:对象创建完成,属性赋值好了之后,调用初始化方法    多实例:在每次获取的时候,调用初始化方法 销毁方法被调用时机    单实例:容器关闭的时候    多实例:容器不会管理这个 bean ; 也就是说容器不会调用这个销毁方法 一、Student 类 public class Student { public Student(){ System.out.println("创建 Student 对象"); } public void init(){ System.out.println("初始化对象"); } public void destory(){ System.out.println("销毁对象"); } } 二、配置类 @Configuration public class ConfigOfLifeCycle { //initMethod:指定初始化的方法 //destroyMethod:指定销毁的方法 @Bean(initMethod="init",destroyMethod=

Spring 初始化bean之前,销毁bean之前

走远了吗. 提交于 2020-03-05 18:30:45
   Spring 初始化bean之前,销毁bean之后需要做的操作方式有三种:   1.通过@PostConstruct实现初始化之前进行的操作,@PreDestroy实现销毁bean之前做的操作   2. 通过在xml中定义init-method和destory-method方法   3. 通过bean实现initializingBean和disposableBean   @PostConstruct说明    被@PostConstruct修饰的方法会在服务器加载Servlet的时候运行,并且只会被服务器调用一次,类似于Serclet的inti()方法。 被@PostConstruct修饰的方法会在构造函数之后,init()方法之前运行。   @PreConstruct说明 被@PreConstruct修饰的方法会在服务器卸载Servlet的时候运行,并且只会被服务器调用一次,类似于Servlet的destroy()方法。 被@PreConstruct修饰的方法会在destroy()方法之后运行,在Servlet被彻底卸载之前。 来源: https://www.cnblogs.com/yangfei-beijing/p/7831662.html

spring源码解析之IOC容器(三)——依赖注入

帅比萌擦擦* 提交于 2020-03-05 17:46:20
  上一篇主要是跟踪了IOC容器对bean标签进行解析之后存入Map中的过程,这些bean只是以BeanDefinition为载体单纯的存储起来了,并没有转换成一个个的对象,今天继续进行跟踪,看一看IOC容器是怎样实例化对象的。   我们都使用过以下代码: 1 FileSystemXmlApplicationContext context=new FileSystemXmlApplicationContext("bean.xml"); 2 User user=context.getBean("user",User.class);   这样我们就能获取到user对象了,所以,不难想象,这个getBean方法就是实例化对象的入口。接下来我们就以这个方法为切入点,来探究IOC容器中bean的实例化过程。getBean方法是在FileSystemXmlApplicationContext的基类AbstractApplicationContext中定义的,代码如下: 1 public <T> T getBean(String name, Class<T> requiredType) throws BeansException { 2 assertBeanFactoryActive(); 3 return getBeanFactory().getBean(name, requiredType)

spring中InitializingBean接口

亡梦爱人 提交于 2020-03-05 17:20:34
InitializingBean接口只包括afterPropertiesSet方法,凡是继承该接口的类,在初始化bean的时候会执行该方法 import org.springframework.beans.factory.InitializingBean; public class TestBean implements InitializingBean{   @Override   public void afterPropertiesSet() throws Exception {     System.out.println("this is afterPropertiesSet");   }   public void test(){     System.out.println("this is a test");   } } 配置文件中配置: <bean id="testBean" class="com.TestBean" ></bean> 写一个测试的main方法: public class Main {   public static void main(String[] args){     ApplicationContext context = new FileSystemXmlApplicationContext("/src/main/java/com

Spring源码分析笔记--AOP

冷暖自知 提交于 2020-03-05 17:19:02
核心类&方法 BeanDefinition Bean的定义信息,封装bean的基本信息,从中可以获取类名、是否是单例、是否被注入到其他bean中、是否懒加载、bean依赖的bean的名称等。 Aware 继承Aware的bean可以感知到他在容器中的一些属性,如获取bean在容器中的ID,甚至获取到容器等。 BeanPostProcessor Bean的后置处理器,可在bean的创建、初始化等阶段的前后对bean进行增强处理等。 BeanFactory 以 Factory 结尾,表示它是一个工厂类 ( 接口 ) ,用于管理 Bean 的一个工厂。在 Spring 中, BeanFactory 是 IOC 容器的核心接口,它的职责包括:实例化、定位、配置应用程序中的对象及建立这些对象间的依赖。 是访问容器的顶层接口,他的实现类中会有一个 MAP ,用于存储 bean 的 BeanDefinition 。 ( 与 FactoryBean 区别:实现 FactoryBean 接口也是在容器中注入 bean 的方式之一,但它不是一个普通的 bean ,而是生成指定 bean 的一个工厂 ) AbstractAutowireCapableBeanFactory :: populateBean ( .. ) DefaultListableBeanFactory 继承了

Spring(六)AOP切入方式

纵饮孤独 提交于 2020-03-05 16:09:50
一、接口切入方式 实现类 package com.pb.entity; /** * 实体类 */ public class Hello { private String name; private String password; public void show(){ System.out.println("姓名 :"+this.getName()+"密码: "+this.getPassword()); } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } } 1.1、前置增强 package com.pb.aop; import java.lang.reflect.Method; import org.springframework.aop.MethodBeforeAdvice; /** * 前置增强的Bean * @author Administrator

Spring 梳理 - filter、interceptor、aop实现与区别 -第二篇

情到浓时终转凉″ 提交于 2020-03-05 16:06:30
spring mvc中的Interceptor可以理解为是Spring MVC框架对AOP的一种实现方式。一般简单的功能又是通用的,每个请求都要去处理的,比如判断token是否失效可以使用spring mvc的HanlderInterceptor, 复杂的,比如缓存,需要高度自定义的就用spring aop。一般来说service层更多用spring aop,controller层有必要用到request和response的时候,可以用拦截器。 servlet filter和spring mvc Interceptor区别: 1.拦截器是基于java的反射机制的,而过滤器是基于函数回调。 2.拦截器不依赖与servlet容器,过滤器依赖与servlet容器。 3.拦截器只能对action请求起作用,而过滤器则可以对几乎所有的请求起作用。 4.拦截器可以访问action上下文、值栈里的对象,而过滤器不能访问。 5.在action的生命周期中,拦截器可以多次被调用,而过滤器只能在容器初始化时被调用一次。 6.拦截器可以获取IOC容器中的各个bean,而过滤器就不行,这点很重要,在拦截器里注入一个service,可以调用业务逻辑。 servlet filter和spring mvc Interceptor执行顺序: ===========before doFilter1 ========

跟我猜Spring-Boot:bean的创建

南笙酒味 提交于 2020-03-05 13:47:41
废话在前 最近几年的技术路子很杂,先是node,然后是php,后来是openresty,再后来转到了java,而接触的框架(Framework),也越发的复杂,从最开始的express/koa,到lumen ,再到spring全家桶,各种切换,也确实一度头疼; 一般而言,学习一种技术下的某种框架当然是去读源码,但开源项目动辙几万十几万行,尤其我又是个懒人,实在是没办法分析了解。于是,我选择了另一种方式,即在使用框架过程中去“猜想“,即去思考他应该去怎么实验的; 其实,不停的猜想,然后写小demo去实现,再到框架源码中针对性的找到机制去阅读,也不失为一种乐趣。 出于这种思维,我在工作中不停的接触过往同事的源码,再从源码中学习到spring各种特性的用法,再去猜想,实现,查看代码去验证,也确实为工作添了些许乐趣。出于这种目的,想把自己这些的猜想做一些整理,与大家分享。z 本系列的文章预谋好久,然而一直不知道该如何开始,不如写一篇算一篇。在这些文章中,我将先去写一个spring的应用特性,然后靠“猜想“去将背后的特性实现出来。 那么本篇,从最基本的入口程序开始吧。 从这个入口程序,我们将看到一个spring bean创建的简单机制。 目标 在本篇文章中,我们要实现一个spring的入口程序,即: App.java package com.github.yfge.miniapp;

spring定时任务的几种实现方式

大憨熊 提交于 2020-03-05 11:14:28
Spring定时任务的几种实现 近日项目开发中需要执行一些定时任务,比如需要在每天凌晨时候,分析一次前一天的日志信息,借此机会整理了一下定时任务的几种实现方式,由于项目采用spring框架,所以我都将结合 spring框架来介绍。 一.分类 从实现的技术上来分类,目前主要有三种技术(或者说有三种产品): Java自带的java.util.Timer类,这个类允许你调度一个java.util.TimerTask任务。使用这种方式可以让你的程序按照某一个频度执行,但不能在指定时间运行。一般用的较少,这篇文章将不做详细介绍。 使用Quartz,这是一个功能比较强大的的调度器,可以让你的程序在指定时间执行,也可以按照某一个频度执行,配置起来稍显复杂,稍后会详细介绍。 Spring3.0以后自带的task,可以将它看成一个轻量级的Quartz,而且使用起来比Quartz简单许多,稍后会介绍。 从作业类的继承方式来讲,可以分为两类: 作业类需要继承自特定的作业类基类,如Quartz中需要继承自org.springframework.scheduling.quartz.QuartzJobBean;java.util.Timer中需要继承自java.util.TimerTask。 作业类即普通的java类,不需要继承自任何基类。 注:个人推荐使用第二种方式,因为这样所以的类都是普通类

Spring定时任务的几种实现

て烟熏妆下的殇ゞ 提交于 2020-03-05 11:07:31
Spring定时任务的几种实现 Spring定时任务的几种实现 近日项目开发中需要执行一些定时任务,比如需要在每天凌晨时候,分析一次前一天的日志信息,借此机会整理了一下定时任务的几种实现方式,由于项目采用spring框架,所以我都将结合 spring框架来介绍。 一.分类 从实现的技术上来分类,目前主要有三种技术(或者说有三种产品): Java自带的java.util.Timer类,这个类允许你调度一个java.util.TimerTask任务。使用这种方式可以让你的程序按照某一个频度执行,但不能在指定时间运行。一般用的较少,这篇文章将不做详细介绍。 使用Quartz,这是一个功能比较强大的的调度器,可以让你的程序在指定时间执行,也可以按照某一个频度执行,配置起来稍显复杂,稍后会详细介绍。 Spring3.0以后自带的task,可以将它看成一个轻量级的Quartz,而且使用起来比Quartz简单许多,稍后会介绍。 从作业类的继承方式来讲,可以分为两类: 作业类需要继承自特定的作业类基类,如Quartz中需要继承自org.springframework.scheduling.quartz.QuartzJobBean;java.util.Timer中需要继承自java.util.TimerTask。 作业类即普通的java类,不需要继承自任何基类。 注:个人推荐使用第二种方式