[Spring]Annotation-based container configuration_AnotationBasis_02

智能车竞赛新手必看:单车定向组直线竞速与八字慢速实战技巧 本文为智能车竞赛新手提供单车定向组直线竞速与八字慢速的实战技巧,涵盖赛道分析、动力调校、传感器配置等关键环节。通过真实案例和代码示例,详细讲解如何平衡速度与稳定性,帮助选手避免常见失误,提升比赛成绩。特别针对智能车竞赛中的直线竞速和八字慢速项目,提供从硬件选型到临场策略的全方位指导。 阅读详情

@Component @Repository @Service @Controller

本质上以上四类没有区别,但是在你定义应用分层的时候 aop的时候 这些不同语义的注解 就有不同意义,未来Spring是否会给予这些语义注解特殊的意义还并不清楚


在配置java类里面注解@ComponentScan(basePackages = "com.domain")的情况下,会自动扫描com.domain包里的所有类,扫描里面带有@Componet,@Repository,@Service..等等注解的类

该句等同于在xml配置文件里面加入了

<context:component-scan base-package="com.javaconfig.domain"/> 

同时@ComponentScan可以在加载包的时候,排除掉一些类,或者包含某些类

@ComponentScan(basePackages = "org.example",
        includeFilters = @Filter(type = FilterType.REGEX, pattern = ".*Stub.*Repository"),
        excludeFilters = @Filter(Repository.class))

表示:扫描org.example包下所有带有@Component衍生的各种语义注解,同时包含该包下的匹配 .*Stub.*Repository类型的(正则匹配),排除扫描Repository.class

base-package的配置,从表面意思来看这是个“基本包”,表示下面的过滤路径是基于这个包的

更多过滤方式参考spring-reference


@Component

扫描一个类注册一个bean

@Component
public class Football {
	@Override
	public String toString() {
		// TODO Auto-generated method stub
		return "football";
	}
}
这就注册了一个名为football的bean 命名规则为首字母小写,如果起始的两个字母都是大写,则不小写首字母。

@Component
public class XYclass {

}
注册了一个XYclass的bean
XYclass xyz = ctx.getBean("XYclass",XYclass.class);
获得该bean



@Bean

以类似工厂的方式产生bean,注意@Bean所在类必须要被spring所扫描到

Tool1:

public class Hammer implements Tool {
	public void doWork() {
		System.out.println("using hammer to smash something");
	}
}
Tool2:

public class Scissors implements Tool{
	public void doWork() {
		System.out.println("using scissors to cut something");
	}
}

ToolBox:

public class ToolBox {
	private Tool[] tools;

	public ToolBox(Tool t1, Tool t2) {
		tools = new Tool[] { t1, t2 };
	}

	public Tool[] getTools() {
		return tools;
	}

	public void setTools(Tool[] tools) {
		this.tools = tools;
	}

}



BeanFactory:
@Component
public class ToolFactory {

	@Bean
	@Qualifier("t1")
	public Tool hammer() {
		return new Hammer();
	}

	@Bean
	@Qualifier("t2")
	public Tool scissors() {
		return new Scissors();
	}

	@Bean
	public ToolBox toolBox(@Qualifier("t1") Tool t1, @Qualifier("t2") Tool t2,
			@Value("this is just tool box") String description) {
		System.out.println(description);
		return new ToolBox(t1, t2);
	}
}

Unit Test:

	@Test
	public void beanTest() {
		Tool t1 = ctx.getBean("hammer",Tool.class);
		Tool t2 = ctx.getBean("scissors",Tool.class);
		t1.doWork();
		t2.doWork();
		ToolBox tb = ctx.getBean("toolBox",ToolBox.class);
		
	}

@Bean产生的bean命名方式 就是方法名字 同时@Bean也会按照类型注入参数


@Configuration 和 @Component 的区别 

@Configuration也是从@Component 衍生出来的注解,但是@Component 相比@Configuration不同点在于,@Component 并没有通过CGLIB 增强调用所注册bean的内部方法和fields调用的。还有@Configuration内的@bean注解的方法 不能为final,因为这需要被CGLIB所重写。


@Component @Repository @Service @Controller等注解 也提供了 生成bean非默认名称方式命名

@Service("myMovieLister")
public class SimpleMovieLister { // ...
}
比如该bean名称就会是myMovielister



@Scope

提供了在注册bean的时候申明该bean的lifecycle

@Scope("prototype")
@Repository
public class MovieFinderImpl implements MovieFinder {
// ...
}


@Configuration

是类级注册bean的注解,该类自身被注册为bean,并且其内的@Bean注解的方法 都会注册为bean。并且顾名思义,这就是一个配置类。

@Configuration
public class AppConfig {
	
	@Bean
	public Foo foo(Bar bar){
		return new Foo(bar);
	}
	
	@Bean
	public Bar bar(){
		return new Bar();
	}
}

这里申明的都是单例实类

Unit Test:

@Test
	public void beanTest2() {
		Foo foo = ctx.getBean("foo", Foo.class);
		Foo foo2 = ctx.getBean("foo", Foo.class);
		Bar bar = ctx.getBean("bar", Bar.class);
		Bar bar2 = ctx.getBean("bar", Bar.class);
		assertEquals(foo, foo2);
		assertEquals(bar, bar2);
		assertEquals(foo.getBar(), foo2.getBar());
	}

测试通过


@Import

导入配置类

@Configuration @Import(ConfigA.class) public class ConfigB {
@Bean
public B b() { return new B();
} }



@ImportResource

导入配置文件

@ImportResource(value = "TestCase_01.xml")



@Condtional

@Conditional注解主要用在以下位置:
类级别可以放在注标识有@Component(包含@Configuration)的类上
作为一个meta-annotation,组成自定义注解
方法级别可以放在标识由@Bean的方法上
如果一个@Configuration的类标记了@Conditional,所有标识了@Bean的方法和@Import注解导入的相关类将遵从这些条件。

简单的说就是根据某些情况选择合适的类进行注册

首先需要编写条件,条件类必须实现Condtion接口的matches方法

判断是否为Mac os

public class MacOsCondition implements Condition{
	public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
		
		return context.getEnvironment().getProperty("os.name").contains("Mac OS X");
	}
}
判断是否为Linux

public class LinuxCondition implements Condition{
	public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
		// TODO Auto-generated method stub
		return context.getEnvironment().getProperty("os.name").contains("Linux");
	}
}

注册bean的时候或者注册整个类的时候用上

	@Bean(name = "systemService")
	@Conditional(LinuxCondition.class)
	public SystemService linuxService() {
		return new LinuxService();
	}

	@Bean(name = "systemService")
	@Conditional(MacOsCondition.class)
	public SystemService macService() {
		return new MacOsService();
	}

根据操作系统不同选择不同的服务

Unit Test:

@Test
	public void conditionTest() {
		SystemService service = ctx.getBean("systemService",SystemService.class);
		service.service();
	}



@Profile

如果在开发时进行一些数据库测试,希望链接到一个测试的数据库,以避免对开发数据库的影响。

该注解提供了灵活的在多个副本之间切换的方法

注册了一个用于开发测试的mockDBService和一个release的MysqlDBService

	@Bean(name = "dbService")
	@Profile("dev")
	public DBService mockDBService(){
		return new MockDBService();
	}
	
	@Bean(name = "dbService")
	@Profile("rc")
	public DBService MysqlDBService(){
		return new MysqlDBService();
	}
	

在进行单元测试的时候

使用@ActiveProfiles(value = "dev")激活所要使用的副本

Unit Test:

@Test
	public void profileTest() {
		DBService dbService = ctx.getBean(DBService.class);
		System.out.println(dbService.count("select * from users"));
	}

也可以使用java激活方式

ctx.getEnvironment().setActiveProfiles("dev");
		ctx.register(AppConfig.class);
		ctx.refresh();




美特CRM mcc_login.jsp存在SQL注入漏洞 MetaCRM 是一种现代化的客户关系管理(CRM)平台,旨在通过集成和自动化的方式帮助企业管理与客户的关系,提高销售和服务效率。MetaCRM 的功能和特性通常涵盖了多个领域,包括销售、营销、客户服务、数据分析和自动化工具。 阅读详情

相关推荐

1.9. Annotation-based Container Configuration

上一节 1.8. Container Extension Points 目录 下一节 1.10. Classpath Scanning and Managed 文章目录1.9. Annotation-based Container ConfigurationAre annotations better than XML for configuring Spring?1.9.1. @Required1.9.2. Using @Autowired1.9.3. Fine-tuning Annotation-ba

u010593516的专栏 588

基于python+flask框架的基于微信小程序的CR公司建设项目信息管理系统-前台(开题+程序+论文) 计算机毕设

特别是随着移动互联网技术的普及,企业对便捷、高效的信息管理系统的需求日益迫切。另一方面,该系统集成了仓管、物料、财务、人事、供应商等多个模块,实现了数据的集中管理和信息共享,有助于企业实现精细化管理,降低运营成本,提升决策效率。:深入调研CR公司的业务需求,明确系统应具备的功能模块,包括仓管员管理模块(物料信息、退回记录、申请信息、仓库信息管理)、财务员管理模块(资金信息管理、采购与租赁款项处理)、人事管理模块、供应商管理模块、项目管理模块(项目信息、设备采购、物料采购、设备租赁)、以及考勤打卡模块等。

zhihao503的博客 960

Spring Core 之 Annotation-based Container Configuration(基于注解的容器配置)

文章目录一、Are annotations better than XML for configuring Spring? 一、Are annotations better than XML for configuring Spring? The introduction of annotation-based configuration raised the question of whether this approach is “better” than XML. The short answer i

qq_38515961的博客 635

ck3m多轴运动控制器笔记1:电机的配置与注意事项

利用PMAC(CK3M)运动控制器来实现对电机的控制,对具体的配置流程和注意事项讲解

p975468132的博客 4640

LAMMPS实操系列(一): 大量FCC-CoCrCuFeNi高熵合金建模与最稳定结构筛选

高熵合金(High-entropy alloys,HEA),是由五种或五种以上等量或大约等量金属形成的合金。由于高熵合金可能具有许多优秀的物理化学性质,因此在材料科学领域受到广泛关注

Ceshigo_CD的博客 3257

[Spring]Annotation-based container configuration_AnotationBasis_01

基于注解的容器配置 首先使用注解和xml配置,本质上没有好坏之分,只有适合不适合之分。如果你觉得哪个顺手就用哪个,或者都用。 首先要使用anotation-config 需要在xml中配置 :该句自动的注册AutowiredAnnotationBeanPostProcessor, CommonAnnotationBeanPostProcessor, PersistenceAnnota

HeapStackk的博客 677

紫光同创FPGA中ADF网表文件的黑匣子封装与PDS环境实战指南

本文详细介绍了在紫光同创FPGA开发环境中使用ADF网表文件进行黑匣子封装的实战指南。通过PDS环境配置、加密ADF生成、黑匣子集成及验证调试等步骤,帮助开发者实现核心IP保护,同时保持设计性能。特别适用于需要模块级代码保护的企业级FPGA开发场景。

weixin_33725239的博客 341

Spring学习笔记5_基于注解的容器配置(Annotation-based Container Configuration)

文章参考来源:Spring Framework官方文档 注解注入在XML注入之前执行。因此,XML配置覆盖了通过两种方法连接的属性的注释。 对于注解 <context:annotation-config/ > 相当于注册了以下几个后处理器post-processors: ConfigurationClassPostProcessor AutowiredAnnotationBeanPostProcessor CommonAnnotationBeanPostProcessor Persis.

hahalan的博客 418

基于uniapp实现自定义日历页面、年份月份选择、动态日历渲染、日期标记及备忘录、无组件依赖、多端兼容

基于UniApp框架下自定义日历组件的完整实现方案,涵盖基础日历渲染、年月选择器集成、动态数据标记等核心功能。提供完整代码段,帮助开发者快速构建高性能、高定制化的日历模块,适用于日程管理、预订系统等场景。

商务合作 / 项目定制 / 学习交流。个人vx:lovely_wml 1万+

【FPGA教程案例89】编译码2——使用vivado核实现RS信道编译码

RS编码,又称里所码,即Reed-solomon codes,是一种前向纠错的信道编码,对由校正过采样数据所产生的多项式有效。当接收器正确的收到足够的点后,它就可以恢复原来的多项式,即使接收到的多项式上有很多点被噪声干扰失真。

FPGA/MATLAB学习教程/源码/项目合作开发 3540

HTML注释、CSS注释、JS注释的区别

HTML注释、CSS注释、JS注释的区别 html: <!-- 注释内容 --> css : /* 注释内容 */ js : 单行 // 多行 /* 注释内容 */ 详情代码

nagenage123的博客 564

R语言使用rms包的psm函数拟合参数生存模型(parametric survival model)、并可视化列线图(诺模图、nomogram)

R语言使用rms包的psm函数拟合参数生存模型(parametric survival model)、并可视化列线图(诺模图、nomogram)

statistics+insight+vista+power 903

[Spring]Annotation-based container configuration_AnotationBasis_03 --JSR 330 Standard Annotations

JSR 330 Standard Annotations javax.inject javax.inject 1 由于这并不包含在javaspring框架中 所以需要通过maven导入依赖 @Inject 类似于@Autowired import javax.inject.Inject; public class SimpleMovieLister { private Mov

HeapStackk的博客 506

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Spring Core 之 Java-based Container Configuration(基于java的容器配置)

文章目录一、Basic Concepts: @Bean and @Configuration(基础概念:@Bean和@Configuration)二、Instantiating the Spring Container by Using AnnotationConfigApplicationContext(使用AnnotationConfigApplicationContext初始化容器)1、Simple Construction(简单构造器)2、Building the Container Program

qq_38515961的博客 470

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Spring-Annotation-based-Container-Configuration

title: Spring-Annotation-based-Container-Configuration date: 2019-01-23 13:58:34 tags: Spring categories: Spring 注解形式与XML形式注入Bean哪个更好 答案是: 取决于具体情况 注解形式: 更加方便,短的申明,但是需要侵入代码 XML形式: 不用触碰源代码,不用重新编译他们 Sp...

Yoke 337

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

Spring Annotation-based container configuration

Spring 零配置时如果一个类实现了BeanPostProcessor,这时我们在用@Bean定义一个Bean时需要用static修饰,具体解释请参考 http://stackoverflow.com/questions/18512446/configuring-class-inside-beanpostprocessor-with-derived-a-abstractsinglebeand...

iteye_1566的博客 229

Spring使用注解自动装配、@Autowired和@Resource比对

Annotation-based Container Configuration 使用annotation配置更加简洁,Spring都支持这两种配置风格 spring2.0引用了@Required spring2.5采用通用的方法来驱动spring依赖注入@Autowired 2.5还添加了JSR-250注释的支持,@PostConstruct和@PreDestroy (初始化方法)(销毁方法) 需要注册单独的Bean定义,和context命名空间 <?xml version="1.0" encodi

haoyun的博客 328

基于注解(Annotation-based)的配置 及 几种注解标签的使用

&lt;?xml version="1.0" encoding="UTF-8"?&gt; &lt;beans xmlns="http://www.springframework.org/schema/beans" //没有任何前缀(比如xsi,context)的这种标签,他的schemaLocation 是                http://www.springframework.o...

Doraemon 457

spring的注入你真搞懂了吗?你不会一直都是这样错误的理解吧?

说起spring的注入,可能大家都有了解。可你认知几种注入方式呢?你所认知的注入方式是否正确呢?我估计大多数人了解注入方式不全面,并且还会曲解一些概念。今天我们就参考最权威的官网来具体谈谈spring的注入方式。

爱学习的狗蛋儿 1503

[Spring]Spring容器扩展点

假如我们要扩展Spring IoC容器,比如对某些bean后续处理,通常来说,我们并不需要去继承ApplicationContext ,取而代之的是 我们依赖于Spring本身所提供的扩展点来扩展Bean的功能。 1.通过实现BeanPostProcessor接口,来扩展bean public interface BeanPostProcessor { Object postPro

HeapStackk的博客 3376

[Spring]简单Junit和Spring整合配置

首先采用了maven来部署所需要的jar包依赖 这里需要srping-context.jar,spring-test.jar,junit.jar,log4j.jar org.springframework spring-context 4.2.5.RELEASE org.springframework spring-test 4.2.5.R

HeapStackk的博客 2674

[Spring]Spring Bean的初始化 ---- getBean方法

Spring 无论实在spring 容器在初始化阶段 还是 懒加载的bean 都是通过BeanFactory的getBean方法来实例化bean的。 getBean方法提供了多种方式来获取bean 可以通过bean的名字,bean的类型等。 但是他们最后都是调用的doGetBean(...)方法 protected T doGetBean( final String name, f

HeapStackk的博客 1812

[Spring]new ClassPathXmlApplicationContext("application.xml")做了些什么

这里需要贴两张图 ClassPathXmlApplicationContext 继承关系树 这张图实际没画全,最上层为 DefaultResourceLoader,该类设置classLoader,并且将配置文件 封装为Resource文件  Resrource根据传入的路径的前缀来判断采取何种封装。 AbstractApplicationContext,该类完成了大部分的IO

HeapStackk的博客 1090

[DP]简单工厂,工厂方法和抽象工厂方法

简单工厂,工厂方法和抽象工厂方法

HeapStackk的博客 886

[DP]Bridge设计模式

Bridge设计模式 桥接设计模式 spring中的桥接举例

HeapStackk的博客 847
上一篇: [Spring]Annotation-based container configuration_AnotationBasis_01
下一篇: [Spring]Annotation-based container configuration_AnotationBasis_03 --JSR 330 Standard Annotations
HeapStackk
博客等级 码龄12年 11粉丝 58原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值