理解Spring-javaconfig

记一次使用spring javaconfig踩到的坑 为了简化开发,我部门经常会封装一些通用的类库给业务研发使用,因为业务方的根包路径很经常和我们部门项目的根包是不一样的,因此我们会让业务方在使用我们封装的包时,扫描一下我们的根包,形如下复制代码不过这样就导致了业务方想使用我们的类库,就必须知道我们的根包。这其实是一种间接的耦合。后面我们就全面使用springboot的自动装配,让业务方无需知道我们的根包,也可以使用我们的类库。然而在我们封装的过程中,也遇到一些坑。本文就来复盘一次我们使用spring javaconfig踩到的坑。本文主要是demo示例演示。 阅读详情

Spring初始化

Servlet3.0标准提供了ServletContainerInitializer接口和HandlesTypes注解,在Web容器启动时完成一些初始化操作,功能同ServletContextListener。

Servlet容器会扫描classpath下的所有jar中META-INF/services/javax.servlet.ServletContainerInitializer文件内容,得到一个实现类。下面是spring framework的结构:

--------------------------spring-web.jar!/META-INF/services/javax.servlet.ServletContainerInitializer文件---------------------
ServletContainerInitializer + (@HandlesTypes)
   |-(Spring): SpringServletContainerInitializer + @HandlesTypes(WebApplicationInitializer.class)
   |    .onStartup(Set<Class<?>> classes, ServletContext ctx) throws ServletException{
   |         for (WebApplicationInitializer initializer : classes){
   |             initializer.onStartup(ctx);
   |         }
   |    }

在spring中实现了一些抽象的WebApplicationInitializer:AbstractContextLoaderInitializer,AbstractDispatcherServletInitializer,AbstractAnnotationConfigDispatcherServletInitializer,AbstractSecurityWebApplicationInitializer(Spring-security)和AbstractHttpSessionApplicationInitializer(Spring-session)等。因此,要“激活”这些组件,只需新建一个空类来继承它们即可。

下面看看spring-security是怎么做到的:

首先,需要编写一个类,继承自AbstractSecurityWebApplicationInitializer,空方法即可,相当于在web.xml中定义了<filter>;

其次,编写一个空类使用注解@EnableWebSecurity即可。或者继承WebSecurityConfiguration,使用@Configuration标注它。

只需这两步,就可完成Spring-security的注入。下面在了解下@configuration

JavaConfig原理:  @Configuration (spring-context.jar)

org.springframework.stereotype
      @Component > @Controller,@Service,@Repository
org.springframework.context.annotation
      @Component > @Configuration { @Bean, @Value, @DependsOn, @ComponentScan, @Import, @ImportResource..... }

凡是被@Component(及其“子类”:@Configuration, @Controller, @Service, @Repository)标注的类,都会在启动的时候被Spring容器扫描到。

@Configuration修饰的类等价于一份spring-xml文件,它的好处就是,可以通过代码来判断分支条件(比如配置文件中的属性值),从而创建出不同的实现类。

与xml混合使用时需要注意:经测试发现,@configuration在xml之后执行,也就是说xml中的Bean找不到@configuration,反之则可以。

前置工作:

     第一种、<context:annotation-config/> + <context:component-scan base-package="..." />

     第二种:零配置
    <servlet>
        <servlet-name>Spring MVC Dispatcher Servlet</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextClass</param-name>
     <!-- 默认:XmlWebApplicationContext -->
            <param-value>org.springframework.web.context.support.AnnotationConfigWebApplicationContext</param-value>
        </init-param>
 <init-param>
            <param-name>contextConfigLocation</param-name>
     <!-- xml路径 -->
            <param-value>com.johnathanmsmith.mvc.web.config, com.johnathanmsmith.mvc.web.controller</param-value>
        </init-param>
    <servlet>

例:

public class ApplicationConfig {
private ZooKeeperTemplate template;
@Autowired
private CsrfSecurityRepository csrfRepo;
@Autowired
private XhhSessionRegistry sessionReg;

@Bean(name="zookeeperTemplate")
public ZooKeeperTemplate createZookeeperTemplate(){
if (this.repoByZookeeper()){
String zkServers = System.getProperty("springsec.registry.servers");
String rootPath = System.getProperty("springsec.registry.root");
Assert.hasText(zkServers);
Assert.hasText(rootPath);
template = new ZooKeeperTemplate(rootPath, zkServers);
return template;
}else{
return null;
}
}

@Bean
@DependsOn("zookeeperTemplate")
public CsrfTokenDao createCsrfTokenDao(){
if (this.repoByZookeeper()){
CsrfTokenDaoZkImpl csrfDao = new CsrfTokenDaoZkImpl();
csrfDao.setTemplate(template);
csrfDao.init();
csrfRepo.setCsrfTokenDao(csrfDao);
return csrfDao;
}else{
//springsession不需要
return null;
}
}

}




ENVI与Sarscape协同处理哨兵一号数据的完整流程解析 本文详细解析了利用ENVI与Sarscape软件协同处理哨兵一号(Sentinel-1)SAR数据的完整工作流程。从环境搭建、数据导入与裁剪,到核心的DEM辅助多时相配准、斑点噪声滤波,再到最终的地理编码与辐射定标,提供了标准化的操作指南与实用技巧,帮助用户高效地将原始雷达数据转化为可用于分析的地理编码产品。 阅读详情

相关推荐

从芯片原厂到BSP工程师:技术转型与核心能力解析

嵌入式系统开发中,BSP(板级支持包)作为连接硬件与操作系统的关键层,其开发能力直接影响设备稳定性与性能。理解Linux内核架构(如内存管理、进程调度)和基础接口协议(I2C/SPI/USB)是BSP工程师的核心技能。在芯片验证与驱动开发场景中,多核异构系统调试与稳定性问题排查(如死机分析)展现了工程师的实战能力。随着物联网与智能设备发展,掌握从硬件适配到系统优化的全链路技术栈,成为职业发展的关键突破点。

weixin_36012152的博客 599

JavaConfig

*JavaConfig 什么是JavaConfig? Spring JavaConfig是Spring社区的产品,他提供了配置Spring IOC容器的纯Java方法 javaConfig的作用 利用纯java开发在不用添加xml配置文件的情况下使用注解以此达到高效的开发 JavaConfig的优点 1.面向对象的配置。由于配置被定义为JavaConfig中的类,因此用户可以充分使用Java中的面向对象功能。一个配置类可以继承另一个,重写它的@Bean方法等。 2.减少或者消除XML配置。基于依赖注入原则的

zhangaiav的博客 1749

【网络协议】TCP的拥塞控制机制

前言 计算机网络中的带宽、交换节点中的缓存和处理机等,都是网络的资源,在某段时间内,若对网络中某一资源的需求超过了该资源所能提供的可用部分,网络的性能就要变坏,这种情况就叫做拥塞。 所谓拥塞控制,就是防止过多的数据注入到网络中,从而使网络中的路由器或链路不致过载。要注意用拥塞控制与流量控制的区别,拥塞控制是一个全局性的过程,涉及到所有的额主机、路由器,以及与降低网 拥塞控制的算法有:慢开始、拥塞避免、快重传、快恢复四种。 慢开始和拥塞避免 发送方维持一个拥塞窗口的状态变量,其大小取决于网络的拥塞程度

兰亭风雨的专栏 1万+

【SpringBoot知识点预备】| Xml 和 JavaConfig

【SpringBoot知识点预备】| Xml 和 JavaConfig

m0_61933976的博客 2296

扫地机器人自动回充技术大揭秘:红外、蓝牙、雷达哪种更适合你家?

本文深入解析扫地机器人自动回充技术的三种主流方案:红外、蓝牙和雷达/LiDAR,详细比较它们的原理、优缺点及适用场景。红外技术成本低但易受干扰,蓝牙穿透性好但精度随距离降低,雷达精度最高适合复杂环境。根据户型大小和家居环境,提供选购建议,帮助用户选择最适合自己家庭的自动回充方案。

weixin_29070721的博客 503

《21天学通C++》阶段性成果测试题——hstring(手写string类)

总体考察了类的使用,缓冲区考察了指针和数组的使用、增删改查、考察编码思维、考察了类的重载。1.初始化子字符串的起始位置为-1,表示未找到,若buffer或findHstring为空,则返回-1。右边的字符串不为空,则分别获取母串和子串的长度(用循环),然后创建一个固定大小的数组。3.然后循环遍历寻找子串在母串中的起始位置,循环时可以通过两个长度相减,避免循环越界。2.如都不为空,则分别获取双方的字符串长度(用循环),然后。右边的字符串为空,则输出原来的字符串。是否为空,有一方为空则返回另一方。

立志成为炼丹师? 1265

Spring入门理解(七)JavaConfig实现配置

前面我们一直使用xml实现配置,最后使用注解代替xml实现配置,本文将再介绍一个实现配置的方法。javaConfig是spring4之后出现的新特性,是利用Java语言实现注册,比xml更灵活。 1 官网介绍 javaConfig代替xml 测试 2 案例实现(注解Bean) 3 代码分析 User.java //@Component public class User { public String name; public String getName() { .

Wyatt_zhai 5282

高分辨率航拍图像的目标检测切图优化策略

本文深入探讨了高分辨率航拍图像目标检测中的切图优化策略。针对大尺寸图像直接缩放导致小目标信息丢失的问题,文章详细阐述了基于重叠切割的核心方法,包括如何根据目标尺寸确定切图尺寸与重叠率,并提供了从切图到坐标还原的完整代码实现与避坑指南,有效提升检测精度与效率。

xk7n92h3p5m的博客 1113

【Spring第七篇】Java配置类:JavaConfig

Java配置类:JavaConfig 在spring配置中 applicationContext.xml <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.

... 8064

BACnet协议栈基本对象BI、BO、AI、AO、AV以及device和File对象介绍

BACnet协议栈基本对象BI、BO、AI、AO、AV以及device和File对象介绍

shufawangzhang的博客 3987

本地通知与健康数据的隐私保护方案

随着移动健康(mHealth)应用的普及,本地通知与健康数据的结合为用户提供了更加个性化的健康管理体验。然而,这种便利性也带来了严峻的隐私保护挑战。本文旨在探讨如何在移动应用中实现本地通知功能的同时,确保用户健康数据的隐私安全。本地通知与健康数据结合的技术架构隐私保护的核心技术方案具体算法实现与数学模型实际应用案例分析本文首先介绍背景知识和核心概念,然后深入探讨隐私保护的技术方案,包括算法原理和数学模型。接着提供实际代码实现和应用场景分析,最后讨论未来发展趋势和挑战。

移动开发前沿的博客 1309

JavaConfig是什么?

你是否曾经困惑于Spring框架中XML配置文件的繁琐与复杂?是否期待一种更简洁、更直观、更强大的配置方式?那么,JavaConfig正是你所需的答案!

LA1245780的博客 919

基于Python的农业市场价格抓取与供需分析:现代爬虫技术与实战应用

在正式开始爬虫开发之前,我们首先了解爬虫的基本概念和工作原理。爬虫(Web Scraping)是通过编程的方式,自动从互联网上获取信息的技术。它可以帮助我们提取HTML页面中的特定数据,通常用于收集并处理大量信息。发送HTTP请求:爬虫需要向目标网站发送请求,获取网站的HTML页面内容。解析HTML页面:通过HTML解析器对获取的页面内容进行解析,提取其中需要的数据。数据清洗与存储:将提取的数据进行清洗,去除多余的字符或无关内容,然后存储到合适的格式(如CSV文件、数据库等)中。数据分析与可视化。

2201_76125261的博客 1117

spring结构理解(JavaConfig)

https://www.cnblogs.com/hafiz/p/9120267.html

weixin_37656125的博客 319

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

如何看Spring源码

想要深入的熟悉了解Spring源码,我觉得第一步就是要有一个能跑起来的极尽简单的框架,下面我就教大家搭建一个最简单的Spring框架,而且是基于Java Config形式的零配置Spring框架。 首先第一步创建一个空的maven web项目,这步很简单,自行百度。 在maven项目的pom.xml文件中添加Spring基础依赖: <properties> <spring.version>4.3.7.RELEASE</spring.ver

m0_67392931的博客 1457

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

java查看spring源码,如何看Spring源码

想要深入的熟悉了解Spring源码,我觉得第一步就是要有一个能跑起来的极尽简单的框架,下面我就教大家搭建一个最简单的Spring框架,而且是基于Java Config形式的零配置Spring框架。首先第一步创建一个空的maven web项目,这步很简单,自行百度。在maven项目的pom.xml文件中添加Spring基础依赖:4.3.7.RELEASE1.7.212.8.21.2org.sprin...

weixin_29479087的博客 510

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Spring JavaConfig参考文档

Spring JavaConfig参考文档 http://dodomail.iteye.com/blog/125989 Spring JavaConfig参考文档 Spring JavaConfig Reference Documentation  官方地址:  http://static.springsource.org/spring-javaconfig/docs/1.0-m2/refer...

远方的星星 374

Spring IoC 之DI实现JavaConfig配置形式

文章目录Spring JavaConfig Bean注入对象注入属性通过构造方法通过setting方法Bean中的其他属性initMethod,destroyMethod总结结语 Spring JavaConfig Bean 注入对象 Book接口 public interface Book { } Book接口的两个实现类JavaBook、SpringBook public class JavaBook implements Book{ @Override public Stri

qq_39079428的博客 330

Spring 源码解读:JavaConfig与XML配置的对比实现

在Spring开发中,配置方式的选择直接影响开发效率和代码可维护性。是选择传统的XML配置,还是现代的JavaConfig配置?这篇文章将带你深入剖析这两种配置方式的实现差异,通过实际项目展示它们各自的优缺点,并帮助你在项目中做出最优选择。无论你是新手还是老手,这篇文章都将让你在Spring配置的世界中如鱼得水,快来一探究竟吧!

捕风捉你 · 星桥API接入与大模型实战 1387

【Spring】使用JavaConfig实现配置

不使用Spring的XML配置,全权交给java来做! JavaConfig是Spring的一个子项目,在Spring4之后,它称为了Spring的核心功能! 实体类: package com.lrx.poji; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereo...

lx15691821984的博客 601

Spring系列(六)注解开发和JavaConfig

扩展:Spring系列学习汇总 文章目录

大鱼的博客 806

泉水经(spring的javaConfig)

spring的javaConfig技术,以胡说八道方式讲述,不懂还请见谅,下篇是正式的技术讲解。

DataVault2.0大数据的未来 449

Spring-09-使用Java的方式配置Spring

9. 使用Java的方式配置Spring 我们现在要完全不使用Spring的xml配置,全权使用Java来配置Spring! JavaConfig是Spring的一个子项目,在Spring4之后,他成为了一个核心功能。 实体类: public class User { private String name; public String getName() { return name; } @Value("huba") //属性注入值 public

HUBA_yosa的博客 205

java spring mvc idea_SpringMvc+JavaConfig+Idea 基于JavaConfig搭建项目

1.介绍之前搭建SpringMvc项目要配置一系列的配置文件,比如web.xml,applicationContext.xml,dispatcher.xml。Spring 3.X之后推出了基于JavaConfig方式以及注解的形式的配置。在一定程度上简化了Spring项目的配置。近几年特别火的SpringBoot,大大的简化了创建项目,基本不需要配置配置文件,就可以快速的创建一个项目。其中一个重要...

weixin_33268205的博客 105

面试官:spring中定义bean的方法有哪些?我一口气说出了12种,把面试官整懵了。

前言 在庞大的java体系中,spring有着举足轻重的地位,它给每位开发者带来了极大的便利和惊喜。我们都知道spring是创建和管理bean的工厂,它提供了多种定义bean的方式,能够满足我们日常工作中的多种业务场景。 那么问题来了,你知道spring中有哪些方式可以定义bean? 我估计很多人会说出以下三种: 最近无意间获得一份BAT大厂大佬写的刷题笔记,一下子打通了我的任督二脉,越来越觉得算法没有想象中那么难了。BAT大佬写的刷题笔记,让我offer拿到手软 没错,但我想说的是以..

9804
上一篇: BSH--Java Shell,Java也执行脚本语言
下一篇: 理解CXF JaxWsDynamicClientFactory jaxb绑定时的错误
treeClimber
博客等级 码龄24年 16粉丝 144原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值