- 浏览: 293380 次
- 性别:
- 来自: 济南
文章分类
- 全部博客 (197)
- 知识梳理 (37)
- 企业架构 (7)
- java (37)
- linux (20)
- oracle (7)
- mysql (15)
- ide使用 (18)
- spring (9)
- nginx (1)
- MyBatis (2)
- 计划 (2)
- javamail+james (1)
- activiti (1)
- 杂谈 (8)
- flex (17)
- android总结 (5)
- android小技巧 (6)
- 术语 (2)
- ant (3)
- window (10)
- svn (5)
- UML (2)
- DOS (2)
- log (5)
- netty (1)
- maven (3)
- zip (1)
- rar (1)
- hibernate (1)
- redis (1)
- JS (3)
- junit (1)
- git (3)
- resin (1)
- 设计模式 (1)
- 读书笔记 (1)
- 分布式 (1)
最新评论
-
aerfaguihua:
请问楼主 netty编写的客户端能否同步监听接收服务器传来的数 ...
Netty 简单样例分析 -
wanggang0321:
...
logback使用 -
lijunwyf41:
写的太好了
Rational Rose四个视图的含义、区别、用途 -
fengyie007:
如果已经修改了,直接更新了再提交就行了啊。
svn: is out of date -
liguangge285:
http://www.blogjava.net/wangfun ...
我的activiti学习笔记
1.属性注入
public class TestAction { TestService testService; public void test(){ testService.test(); } /** * 使用属性注入 */ public void setTestService(TestService testService) { this.testService = testService; } }
<bean id="testAction" class="com.chen.action.TestAction"> <!-- 属性注入 --><property name="testService" ref="testService"></property> </bean> <bean id="testService" class="com.chen.service.impl.TestServiceImpl"></bean>
2.自动属性注入
public class TestAction { @Autowired TestService testService; public void test(){ testService.test(); } }
<bean id="testAction" class="com.chen.action.TestAction"></bean> <bean id="testService" class="com.chen.service.impl.TestServiceImpl"></bean>
3.自动扫描
@Controller public class TestAction { @Autowired TestService testService; public void test(){ testService.test(); } /** * 使用属性注入 */ // public void setTestService(TestService testService) { // this.testService = testService; // } }
@Service public class TestServiceImpl implements TestService { @Override public void test() { System.out.println("test"); } }
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <!-- component-scan标记包含此功能 <context:annotation-config/>--> <!-- 自动扫描,base-package 属性指定了需要扫描的类包,类包及其递归子包中所有的类都会被处理--> <context:component-scan base-package="com.chen"/> <!-- <bean class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor"/> --> <!-- <bean id="testAction" class="com.chen.action.TestAction"> </bean> <bean id="testService" class="com.chen.service.impl.TestServiceImpl"></bean> --> </beans>
参见如下两篇文章:
Spring配置项之<context:annotation-config/>
http://kld208.iteye.com/blog/1632871
使用 @Component
虽然我们可以通过@Autowired或@Resource在 Bean 类中使用自动注入功能,但是 Bean 还是在 XML 文件中通过
<bean> 进行定义 —— 也就是说,在 XML 配置文件中定义 Bean,通过@Autowired或@Resource为
Bean 的成员变量、方法入参或构造函数入参提供自动注入的功能。能否也通过注释定义 Bean,从 XML 配置文件中完全移除 Bean
定义的配置呢?答案是肯定的,我们通过 Spring 2.5 提供的@Component注释就可以达到这个目标了。
下面,我们完全使用注释定义 Bean 并完成 Bean 之间装配:
清单 20. 使用 @Component 注释的 Car.java
package com.baobaotao;
import org.springframework.stereotype.Component;
@Component
public class Car { …}
仅需要在类定义处,使用@Component注释就可以将一个类定义了 Spring 容器中的 Bean。下面的代码将Office定义为一个 Bean:
清单 21. 使用 @Component 注释的 Office.java
package com.baobaotao;
import org.springframework.stereotype.Component;
@Component
public class Office {
private String officeNo = "001";
…
}
这样,我们就可以在 Boss 类中通过@Autowired注入前面定义的Car和Office Bean了。
清单 22. 使用 @Component 注释的 Boss.java
package com.baobaotao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Required;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Component;
@Component("boss")
public class Boss {
@Autowired
private Car car;
@Autowired
private Office office;
…
}
@Component有一个可选的入参,用于指定 Bean 的名称,在 Boss 中,我们就将 Bean
名称定义为“boss”。一般情况下,Bean 都是 singleton 的,需要注入 Bean 的地方仅需要通过 byType
策略就可以自动注入了,所以大可不必指定 Bean 的名称。
在使用@Component注释后,Spring 容器必须启用类扫描机制以启用注释驱动 Bean 定义和注释驱动 Bean 自动注入的策略。Spring 2.5 对 context 命名空间进行了扩展,提供了这一功能,请看下面的配置:
清单 23. 简化版的 beans.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.springframework.org/schema/context"
- xsi:schemaLocation ="http://www.springframework.org/schema/beans
- http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
- http://www.springframework.org/schema/context
- http://www.springframework.org/schema/context/spring-context-2.5.xsd">
- < context:component-scan base-package = "com.baobaotao" />
- </ beans >
这里,所有通过 <bean> 元素定义 Bean 的配置内容已经被移除,仅需要添加一行
<context:component-scan/> 配置就解决所有问题了——Spring XML
配置文件得到了极致的简化(当然配置元数据还是需要的,只不过以注释形式存在罢了)。<context:component-scan/> 的
base-package 属性指定了需要扫描的类包,类包及其递归子包中所有的类都会被处理。
值得注意的是 <context:component-scan/> 配置项不但启用了对类包进行扫描以实施注释驱动 Bean
定义的功能,同时还启用了注释驱动自动注入的功能(即还隐式地在内部注册了AutowiredAnnotationBeanPostProcessor和
CommonAnnotationBeanPostProcessor),因此当使用 <context:component-scan/>
后,就可以将 <context:annotation-config/> 移除了。
默认情况下通过@Component定义的 Bean 都是 singleton 的,如果需要使用其它作用范围的 Bean,可以通过@Scope注释来达到目标,如以下代码所示:
清单 24. 通过 @Scope 指定 Bean 的作用范围
package com.baobaotao;
import org.springframework.context.annotation.Scope;
…
@Scope("prototype")
@Component("boss")
public class Boss {
…
}
这样,当从 Spring 容器中获取bossBean 时,每次返回的都是新的实例了。
spring组件扫描<context:component-scan/>使用详解
<context:component-scan base-package="leot.test" use-default-filters="false">
<!-- 扫描符合@Service @Repository的类 -->
<context:include-filter type="annotation" expression="org.springframework.stereotype.Service" />
<context:include-filter type="annotation" expression="org.springframework.stereotype.Repository" />
</context:component-scan>
Spring 2.5引入了更多典型化注解(stereotype annotations):
@Component
、@Service
和
@Controller
。
@Component
是所有受Spring管理组件的通用形式;而@Repository
、@Service
和
@Controller
则是@Component
的细化,用来表示更具体的用例(例如,分别对应了持久化层、服务层和表现层)。也就是说,你能用@Component
来注解你的组件类,但如果用@Repository
、@Service
或@Controller
来注解它们,你的类也许能更好地被工具处理,或与切面进行关联。例如,这些典型化注解可以成为理想的切入点目标。当然,在Spring
Framework以后的版本中, @Repository
、@Service
和
@Controller
也许还能携带更多语义。如此一来,如果你正在考虑服务层中是该用
@Component
还是@Service
,那@Service
显然是更好的选择。同样的,就像前面说的那样,
@Repository
已经能在持久化层中进行异常转换时被作为标记使用了。”
下面是网上目前关于组件扫描最详细的介绍
Spring applicationContext.xml的<context:component-scan>標籤用途比我想像的還要實用。而且後來才知道,有了<context:component-scan>,另一個<context:annotation-config/>標籤根本可以移除掉,因為被包含進去了。原本我survery Spring3通常只配置成<context:component-scan base-package="com.foo.bar"/>,意即在base-package下尋找有@Component和@Configuration的target Class。而現在如下的飯粒:
<context:component-scan
base-package="com.foo" use-default-filters
="false"> |
<context:component-scan>提供兩個子標籤:<context:include-filter> 和<context:exclude-filter>各代表引入和排除的過濾。而上例把use-default-filters屬性設為 false,意即在base-package所有被宣告為@Component和@Configuration等target Class不予註冊為bean,由filter子標籤代勞。
filter標籤在Spring3有五個type,如下:
Filter Type | Examples Expression | Description |
annotation | org.example.SomeAnnotation | 符合SomeAnnoation的target class |
assignable | org.example.SomeClass | 指定class或interface的全名 |
aspectj | org.example..*Service+ | AspectJ語法 |
regex | org\.example\.Default.* | Regelar Expression |
custom | org.example.MyTypeFilter | Spring3新增自訂Type,實作org.springframework.core.type.TypeFilter |
所以上例用的regex就有個語病,com.foo.config.* 可以找到com.foo.config.WebLogger,但也可以找到com1fool2config3abcde,因為小數點在Regex是任意字 元,是故要用\.把小數點跳脫為佳。(2010/3/15補充:但要使用\.方式,其use-default-filters不能為false,否則抓不 到,感覺是Bug)
Spring3提供豐富的Filter支援,有益配置策略,不需面臨Configuration Hell,比如Regex的com\.foo\.*\.action\.*Config,這樣就可以找到com.foo package下所有action子package的*Config的target class。
我按他的例子,配置了我自己的如下:
<context:include-filter type="regex" expression="com.lee.finance.budget.service.*"/>
<context:include-filter type="regex" expression="com.lee.finance.budget.security.*"/>
</context:component-scan>
<context:include-filter type="regex" expression="com.lee.finance.budget.*"/>
</context:component-scan>
<context:include-filter type="regex" expression="com\.lee\.finance\.budget\.service.*"/>
</context:component-scan>问题依旧
<context:include-filter type="regex" expression="com.lee.finance.budget.service.TestService"/>
</context:component-scan>
<context:include-filter type="regex" expression=".service.*"/>
</context:component-scan>
发表评论
-
actuator服务监控与管理
2019-07-10 17:19 562引自:https://www.cnblogs.com/ba ... -
spring Quartz&Task之间的对比
2019-02-27 16:52 388摘自https://blog.csdn.net/swl97 ... -
谈谈对Spring IOC的理解
2018-11-26 16:15 401转自:https://www.cnblogs.com/xdp ... -
Spring分析
2018-11-26 14:57 300Spring概述: Spring作用:Spring 框架 ... -
深入理解Spring MVC 思想
2018-08-06 10:29 418原文地址:http://elf8848.iteye.com/b ... -
SpringMVC学习笔记
2018-08-03 14:17 381原文地址:https://www.cnblogs.com/s ... -
Spring常用注解
2016-07-22 15:00 365使用注解来构造IoC容器 用注解来向Spring容器注册B ... -
spring 自动扫描过滤使用(用于一个接口多实现)
2012-12-18 10:42 8721两个实现类,放在了不同包下 package com.c ...
相关推荐
(1)Product类(商品类):含id(商品编号)、proName(商品名称)、price(价格),并为所有属性生成get和set方法。 (2)Market类(超市类):含marketName(超市名称)、productArr(仓库,List集合) ...
什么是spring,spring核心,spring优点,spring体系结构, 入门案例,DI基础,核心API,文档内附代码
Spring Ioc容器是整个Spring框架的基石,它负责创建、配置和管理对象。容器通过读取XML、Java注解或Java配置类等方式,获取对象的定义信息,然后根据这些信息实例化对象并进行依赖注入。 **三、依赖注入(DI,...
Spring IoC 和 DI 注解开发 Spring IoC 和 DI 注解开发概述 Spring IoC(Inverse of Control,控制反转)是一种软件设计模式,它将传统的控制权从应用程序转移到框架中,使得应用程序更加灵活和可扩展。DI...
JAVAEE之Spring IoC&DI Spring IoC(Inversion of Control,即控制反转)是Spring框架的核心机制之一,它提供了一种解耦合的方式,使得应用程序的各个组件之间能够松散耦合,提高了系统的灵活性和可维护性。 在传统...
Spring的核心特性包括AOP(面向切面编程)和IOC(控制反转),以及依赖注入(DI)。以下是对这些概念的详细解释: **面向切面编程(AOP)** AOP是一种编程范式,它允许开发者将关注点从主业务逻辑中分离出来,例如...
实现IOC的方式主要有两种:依赖注入(Dependency Injection,DI)和依赖查找(Dependency Lookup)。依赖注入是Spring最常用的实现方式,它包括构造器注入、设值注入和接口注入。通过XML配置、注解或Java配置,...
在Spring框架中,使用XML配置文件来实现IoC和DI。例如,在applicationContext.xml文件中,可以配置Bean的定义和依赖关系,从而实现IoC和DI。 Spring IOC和DI的实现原理及实例解析是Spring框架的基础,它提供了一种...
jBeanBox项目的定位:需要一个功能较全的IOC/AOP工具,但是又不想引入臃肿的Spring。 其它IOC/AOP工具的问题: Spring: 源码臃肿,Java方式的配置不灵活, 非单例模式时性能差。 Guice: 源码臃肿(200多个类),手工...
Spring框架是Java开发中不可或缺的一部分,它以IoC(Inversion of Control,控制反转)和DI(Dependency Injection,依赖注入)为核心,极大地简化了应用程序的复杂性。在本教程中,我们将深入探讨如何通过XML配置在...
本资源主要讲解了Spring框架的基础概念和应用,涵盖了面向接口编程、IOC/DI、AOP、Spring应用IOC/DI、Spring应用AOP、Struts2.1.6 + Spring2.5.6 + Hibernate3.3.2整合、Spring JDBC面向接口编程等内容。 面向接口...
DI(Dependency Injection,依赖注入)是IOC的一种实现方式,通过配置或编程的方式,将对象之间的依赖关系在运行时动态注入,而不是由对象自己去查找和创建依赖。 在Spring IOC中,主要的注入方式有以下几种: 1. ...
Spring框架是Java开发中不可或缺的一部分,它以其强大的依赖注入(DI)和控制反转(IOC)功能而闻名。本文将深入探讨如何使用Spring的IOC和DI特性,结合动态代理(Dynamic Proxy)来实现一种类似AOP(面向切面编程)...
在本文中,我们将深入探讨Spring框架的核心特性——控制反转(Inversion of Control,简称IoC)和依赖注入(Dependency Injection,简称DI),以及如何通过注解配置和Maven项目构建来实现这一概念。Spring框架是Java...
Spring IOC容器通过XML配置文件或者基于注解的方式,定义了对象的生命周期和依赖关系。开发者不再需要手动创建对象,而是声明对象及其依赖,然后由Spring容器负责实例化、初始化和管理这些对象。这样,对象之间的...
在实际应用中,DI通常作为IoC容器的一部分来实现,例如Spring框架中的BeanFactory或ApplicationContext,它们都提供了依赖注入的功能,从而帮助开发人员遵循IoC的原则,构建出更加灵活、可维护的软件系统。...
3. **依赖注入(DI)**:是IOC的核心。Spring容器负责管理Bean的生命周期,并根据Bean之间的依赖关系进行实例化和装配。依赖可以通过属性注入、构造函数注入或方法注入等方式实现。 4. **Bean的作用域**:Spring...
IoC/DI 容器、Spring 框架、MyBatis、Ajax 相关知识点总结 IoC/DI 容器是一种设计思想,意味着将设计好的对象交给 Spring 容器控制,而不是传统的在对象内部直接控制。IoC/DI 容器主要控制了外部资源获取(不只是...
- **依赖注入(DI,Dependency Injection)**:是IOC的一种实现方式,Spring通过DI管理对象的依赖关系,即在运行时将依赖的对象注入到需要它们的组件中。 **2. Spring容器** - **Bean工厂(BeanFactory)**:...
例如,`SpringIOC`目录中的配置文件(如`applicationContext.xml`)用于定义bean的定义和它们之间的依赖关系。通过XML或注解方式声明bean,Spring可以自动管理bean的实例化、初始化和销毁,从而简化了代码并提高了可...