当前位置: 首页 > wzjs >正文

怎样修改手机网站首页搜索引擎推广方式有哪些

怎样修改手机网站首页,搜索引擎推广方式有哪些,深圳外包公司网站,网站编辑没有经验可以做吗Spring 提供了多种机制让我们能够在 Bean 生命周期的不同节点“插入”自己的逻辑,这些机制可以分为两大类:针对单个 Bean 的干预和针对所有/多个 Bean 的全局干预。 一、 针对单个 Bean 的干预(最常用) 这些方法让你为一个特定的…

Spring 提供了多种机制让我们能够在 Bean 生命周期的不同节点“插入”自己的逻辑,这些机制可以分为两大类:针对单个 Bean 的干预针对所有/多个 Bean 的全局干预


一、 针对单个 Bean 的干预(最常用)

这些方法让你为一个特定的 Bean 类定义其初始化和销毁逻辑。

1. 使用 JSR-250 注解(推荐方式)

这是现在最优雅、也是 Spring 官方推荐的方式。它使用 Java 的标准注解,与 Spring 框架解耦。

  • @PostConstruct:在依赖注入完成之后,执行任何自定义的初始化逻辑。可以把它看作是 Bean 的“构造函数完成后的补充构造函数”。
  • @PreDestroy:在容器销毁 Bean 之前,执行清理工作。

示例:

import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;@Service
public class DataProcessor {@Autowiredprivate DataSource dataSource; // 依赖会被先注入private Connection connection;public DataProcessor() {System.out.println("1. 调用构造函数: dataSource is null? " + (dataSource == null));}@PostConstructpublic void openConnection() {System.out.println("3. 执行 @PostConstruct: dataSource is null? " + (dataSource == null));System.out.println("正在打开数据库连接...");// 此时 dataSource 已经被注入,可以安全使用// this.connection = dataSource.getConnection(); }public void process() {System.out.println("正在处理数据...");}@PreDestroypublic void closeConnection() {System.out.println("执行 @PreDestroy: 正在关闭数据库连接...");// if (this.connection != null) this.connection.close();}
}

优点:代码简洁,与 Spring 解耦,符合 Java EE 规范。

2. 实现 Spring 的特定接口

这是 Spring 早期提供的方式,需要你的 Bean 类实现 Spring 框架的接口。

  • InitializingBean:实现它的 afterPropertiesSet() 方法,效果同 @PostConstruct
  • DisposableBean:实现它的 destroy() 方法,效果同 @PreDestroy

示例:

import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.DisposableBean;@Component
public class LegacyService implements InitializingBean, DisposableBean {@Overridepublic void afterPropertiesSet() throws Exception {System.out.println("执行 InitializingBean.afterPropertiesSet()");}@Overridepublic void destroy() throws Exception {System.out.println("执行 DisposableBean.destroy()");}
}

缺点:代码与 Spring 框架产生了强耦合,不推荐在新代码中使用。

3. 在配置中指定 init-methoddestroy-method

这种方式完全将生命周期逻辑的调用与 Bean 类本身解耦。适用于你无法修改其源代码的第三方库 Bean。

XML 配置:

<bean id="myService" class="com.example.MyService" init-method="customInit" destroy-method="customCleanup"/>

Java 配置:

@Configuration
public class AppConfig {@Bean(initMethod = "customInit", destroyMethod = "customCleanup")public MyService myService() {return new MyService();}
}

优点:对类代码无侵入。

三者执行顺序@PostConstruct -> InitializingBean.afterPropertiesSet() -> init-method


二、 针对所有/多个 Bean 的全局干预(高级/框架级)

这些机制是 Spring 框架的强大武器,允许你对容器中所有(或部分)Bean 的生命周期进行统一的、批量的处理。

1. BeanPostProcessor(Bean 后置处理器)

这是最重要、最强大的全局干预接口。它像一个“质检员”,容器中每一个 Bean 在初始化前后都会经过它进行“检查”和“加工”。

它有两个核心方法:

  • postProcessBeforeInitialization(Object bean, String beanName):在任何 Bean 的初始化方法(如 @PostConstruct调用前执行。
  • postProcessAfterInitialization(Object bean, String beanName):在任何 Bean 的初始化方法调用后执行。

Spring 的 AOP(如 @Transactional)就是通过 BeanPostProcessor 实现的。它在 postProcessAfterInitialization 阶段检查 Bean,如果发现需要代理,就返回一个代理对象来替换原始的 Bean 实例。

示例: 创建一个打印所有 Bean 初始化信息的后置处理器。

import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanPostProcessor;
import org.springframework.stereotype.Component;@Component
public class MyBeanPostProcessor implements BeanPostProcessor {@Overridepublic Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {System.out.println("质检员[Before]: 正在检查 " + beanName);return bean; // 必须返回 bean,否则后续流程拿不到对象}@Overridepublic Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {System.out.println("质检员[After]: " + beanName + " 已完成初始化。");// 这里可以返回原始 bean,也可以返回一个包装后的代理 beanreturn bean;}
}
2. Aware 系列接口

Aware 接口的作用是让 Bean 能够“感知”并获取到它所在的容器环境资源。这发生在依赖注入之后,自定义初始化方法之前

  • BeanNameAware:让 Bean 知道它在容器中的 ID。
  • BeanFactoryAware:让 Bean 获取到创建它的 BeanFactory,从而可以编程方式地获取其他 Bean。
  • ApplicationContextAware:功能同上,但获取的是功能更强大的 ApplicationContext

示例:

import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;@Component
public class AwareService implements ApplicationContextAware {private ApplicationContext context;@Overridepublic void setApplicationContext(ApplicationContext applicationContext) throws BeansException {System.out.println("AwareService 感知到了 ApplicationContext");this.context = applicationContext;}public void doSomething() {// 可以通过 context 手动获取其他 beanDataProcessor processor = context.getBean(DataProcessor.class);processor.process();}
}

注意:过度使用 Aware 接口会增加代码与 Spring 容器的耦合度,应谨慎使用。

总结

干预方式作用阶段影响范围推荐度/适用场景
@PostConstruct / @PreDestroy初始化后 / 销毁前单个 Bean强烈推荐,代码清晰,与框架解耦。
InitializingBean / DisposableBean初始化后 / 销毁前单个 Bean不推荐,与 Spring 强耦合,用于兼容老代码。
init-method / destroy-method初始化后 / 销毁前单个 Bean推荐,用于无法修改源码的第三方 Bean。
BeanPostProcessor初始化前后所有 Bean高级/框架级。用于实现 AOP、自定义注解处理等全局逻辑。
Aware 接口初始化前单个 Bean谨慎使用。当 Bean 需要主动与容器交互时使用。

简单来说,作为应用开发者,你的首选和绝大多数情况下的选择应该是 @PostConstruct@PreDestroy 如果你需要开发框架级别的功能,那么 BeanPostProcessor 则是你的核武器。

http://www.dtcms.com/wzjs/373235.html

相关文章:

  • 深圳优秀网站建设价格发布悬赏任务的推广平台
  • 成都网站建设维护引流推广怎么做
  • 国美网站建设特点石家庄网络推广平台
  • 成都哪家做网站建设比较好苏州网站建设费用
  • 找人开发一个网站多少钱2020国内十大小说网站排名
  • 青岛谁优化网站做的好谷歌浏览器官方正版下载
  • 做外账要登什么网站如何开网店
  • 重庆城市建设档案馆网站自己怎么免费做网站
  • 网站排名优化效果东莞关键词自动排名
  • b2b电子商务网站建设方案线上营销的优势和劣势
  • 虚拟主机销售网站模板重庆seo全网营销
  • wordpress 例子网站的优化seo
  • 学做西餐网站代写文章多少钱
  • wordpress 自动封面seo按照搜索引擎的
  • 房地产公司网站模板百度浏览器
  • 广州网站设计公司兴田德润在哪儿关键词排名点击工具
  • 商丘网站优化每日新闻快报
  • 如何做公司o2o网站赣州seo公司
  • 怎样做网站步骤百度刷排名百度快速排名
  • 做网站需要解析吗百度手机网页版入口
  • 做网站联系我们模板免费seo教程免费
  • 遵义网站制作一般需要多少钱网络怎样做推广
  • 全国最大的网站建设公司seo新手教程
  • 衡阳seo网站推广青山seo排名公司
  • 小白如何做网站咨询公司
  • 入侵网站后台管理系统推广产品的方式有哪些
  • 威海网站建设哪一家线上推广的好处
  • go和java做网站优化公司哪家好
  • 百度免费网站怎样建设百度收录在线提交
  • wordpress默认小工具seo查询seo优化