- 浏览: 2289763 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (314)
- JAVA基础知识 (54)
- Java-IO/FIle (16)
- Java-JDBC (4)
- JAVA-新增特性-注解 (3)
- Java-枚举 (2)
- Java-泛型 (1)
- Java-多线程 (15)
- Java-XML (4)
- Java-JMS(消息服务) (4)
- Java-JVM (0)
- Web Service服务 (7)
- Jsp (10)
- js (18)
- Struts框架 (11)
- Spring框架 (29)
- Hibernate框架 (28)
- Spring Boot框架 (2)
- ExtJS前端框架 (29)
- Jquery js库 (8)
- JUnit框架 (8)
- Selenium 测试 (1)
- NoSql---Redis (6)
- ORACLE数据库 (45)
- MySQL数据库 (4)
- tomcat (3)
- Nginx反向代理服务器 (4)
- web应用服务器通用知识 (3)
- 开发工具IDE (14)
- UML建模 (1)
- SVN CVS 版本管理 (6)
- git 分布式版本管理 (4)
- 报表设计 (5)
- 文件上传下载 (2)
- 数据算法 (1)
- 存储过程 (5)
- JSON 相关 (1)
- OGNL表达式 (3)
- Util工具包 (9)
- 设计模式 (15)
- linux 相关 (3)
- life think (3)
- 工作流管理框架 (1)
- 大数据-Hadoop (1)
最新评论
-
huih:
很不错的文章
SpringMVC+Hibernate+Spring 简单的一个整合实例 -
calm01:
学习了.
Spring <bean>标签属性 Autowire自动装配(转载) -
lizhenlzlz:
我的也是拦截不了service层
SpringAOP拦截Controller,Service实现日志管理(自定义注解的方式)(转载) -
josh_123:
讲的不错,很详细,如果quartz定时任务类采用不继承任何类的 ...
Spring,jdk定时任务的几种实现以及任务线程是串行还是并行执行(转载) -
human_coder:
你知道eclipse调试怎么可以回调吗?有时候总是调快了,不能 ...
Debug---Eclipse断点调试基础
我们在以前学习Spring的时候,其所有的配置信息都写在applicationContext.xml里,大致示例如下:
java代码:
- <beans>
- <bean name="ds" class="org.apache.commons.dbcp.BasicDataSource">
- <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"/>
- <property name="url" value="jdbc:oracle:thin:@localhost:1521:wangbin"/>
- <property name="username" value="tech37"/>
- <property name="password" value="tech37"/>
- </bean>
- <bean name="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
- <property name="dataSource" ref="ds"/>
- </bean>
- <tx:advice id="txAdvice" transaction-manager="txManager">
- <tx:attributes>
- <tx:method name="get*" read-only="true"/>
- <tx:method name="*"/>
- </tx:attributes>
- </tx:advice>
- <aop:config>
- <aop:advisor advice-ref="txAdvice"
- pointcut="execution(* cn.javass..business.ebo.*Ebo.*(..))"/>
- </aop:config>
- </beans>
<beans>
<bean name="ds" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"/>
<property name="url" value="jdbc:oracle:thin:@localhost:1521:wangbin"/>
<property name="username" value="tech37"/>
<property name="password" value="tech37"/>
</bean>
<bean name="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="ds"/>
</bean>
<tx:advice id="txAdvice" transaction-manager="txManager">
<tx:attributes>
<tx:method name="get*" read-only="true"/>
<tx:method name="*"/>
</tx:attributes>
</tx:advice>
<aop:config>
<aop:advisor advice-ref="txAdvice"
pointcut="execution(* cn.javass..business.ebo.*Ebo.*(..))"/>
</aop:config>
</beans>
在上面的示例中,我们可以典型的看到Spring的三种功能:
1、IoC容器,如:
<bean …>
<property…/>
</bean>
2、AOP
<aop:config/>
3、事务
<tx:advice/>
首先我们学习如何使用注解来构造IoC容器。
用注解来向Spring容器注册Bean。需要在applicationContext.xml中注册<context:component-scan base-package=“cn.javass”/>。表明cn.javass包及其子包中,如果某个类的头上带有特定的注解【@Component/@Repository/@Service/@Controller】,就会将这个对象作为Bean注册进Spring容器。
以上的4个注解,用法完全一摸一样,只有语义上的区别。
@Component 是所有受Spring 管理组件的通用形式,Spring 还提供了更加细化的注解形式: @Repository 、@Service 、@Controller ,它们分别对应数据层Bean ,业务层Bean ,和表现层Bean 。
其中,@Component不推荐使用。
这四个注解都可以放在类的头上,如果不指定其value【@Service】,则默认的bean名字为这个类的简单类名首字母小写;如果指定value【@Service(“dao”)】,则使用value作为ban名字。
注意:如果cn.javass.SampleDao和cn.javass1.SampleDao都只用@Service注解,而不指定value会发生什么事?
除了注册Bean之外,还可以通过在<bean>上设置属性来控制Bean的其他属性,比如:
<bean name="" class=""
lazy-init=“true” //是否延迟初始化
scope=“prototype” //bean的生命周期
depends-on=“其他bean“ //依赖其他bean
/>
在Spring中也有相应的注解去对应
@Lazy
@Scope
@DependsOn
他们都是放在类的头上。
除了注册Bean之外,还可以通过在<bean>上设置属性来控制Bean的初始化方法和析构方法,比如:
<bean name="" class=""
init-method=“init“ //初始化方法
destroy-method=“close“ //析构方法
/>
在Spring中也有相应的Bean去对应,当然,这两个注解是jdk里内置的
@PostConstruct
@PreDestroy
这两个注解放在方法头上。
@Autowired 根据bean 类型从spring 上下文中进行查找。我们需要从以下几方面来学习这个注解:
1、它都能放在什么头上?
它可以放在属性、方法和构造方法头上。
2、根据什么注入?
2.1、如果某个接口的实现类在Spring容器中唯一的话,仅使用@Autowired就可以正确注入,如:
@Autowired
private SampleDao dao;
2.2、如果某个接口的实现类在Spring容器中不唯一
2.2.1、用@Qualifier来指定注入Bean的名字,如
@Autowired
@Qualifier(“sampleDaoImpl”)
private SampleDao dao;
2.2.2、用@Primary在多个Bean之中指定哪个为最优先者,注意它不是跟@Autowired配合使用,而是跟@Service配合使用,如
@Service @Primary SampleDaoImpl
2.2.3、用属性名、方法参数名、构造方法参数名来设置注入哪个 Bean,如
public class SampleDaoImpl implements SampleDao
public class SampleDaoImpl1 implements SampleDao
对应
@Autowired
private SampleDao sampleDaoImpl;
注意:属性名在编译后是一定存在的;但是方法参数名和构造方法参数名必须指定相应的编译选项才能保留。
3、@Autowired只有一个选项, boolean required() default true;是否必须,且默认为true。因此,如果仅仅使用@Autowired,就必须要能注入,否则会报错。
@Resource拥有和@Autowired类似的作用。
Spring还支持使用@Configuration,把一个类作为一个IoC容器,它的某个方法头上如果注册了@Bean,就会作为这个Spring容器中的Bean。
java代码:
- @Configuration("ctx")
- public class JavaApplicationContext {
- @Bean
- public String hello(){
- return "hello";
- }
- @Bean
- public int max(){
- return 9;
- }
- }
@Configuration("ctx")
public class JavaApplicationContext {
@Bean
public String hello(){
return "hello";
}
@Bean
public int max(){
return 9;
}
}
使用AnnotationConfigApplicationContext获得Spring容器
ApplicationContext context = new AnnotationConfigApplicationContext(JavaApplicationContext.class);
使用@ImportResource (“classpath:applicationContext.xml”)可以把其他容器导入到这个容器中。
Spring使用的AOP注解分为三个层次:
1、@Aspect放在类头上,把这个类作为一个切面,但是这个类一定要显式的注册在Spring容器中。
2、 @Pointcut放在方法头上,定义一个可被别的方法引用的切入点表达式。
3、5种通知。
3.1、@Before,前置通知,放在方法头上。
3.2、@After,后置【finally】通知,放在方法头上。
3.3、@AfterReturning,后置【try】通知,放在方法头上,使用returning来引用方法返回值。
3.4、@AfterThrowing,后置【catch】通知,放在方法头上,使用throwing来引用抛出的异常。
3.5、@Around,环绕通知,放在方法头上,这个方法要决定真实的方法是否执行,而且必须有返回值。
发表评论
-
初探RestTemplate--postForObject方法直接传递对象(转载)
2020-05-01 10:22 1140https://blog.csdn.net/mryang125 ... -
Spring Boot 使用JdbcTemplate(转)
2017-03-08 15:04 1907原文地址:http://blog.csdn.net/liu ... -
使用 Spring Data JPA 简化 JPA 开发(转载)
2015-08-18 16:32 1799从一个简单的 JPA 示例开始 本文主要讲述 Spring ... -
SpringAOP拦截Controller,Service实现日志管理(自定义注解的方式)(转载)
2015-08-14 16:26 10509首先我们为什么需要做日志管理,在现实的上线 ... -
spring配置datasource的三种方式(转载)
2015-04-09 15:04 44481、使用org.springframework ... -
web应用程序和它之中的线程问题(转载)
2015-02-09 16:19 3112原文地址:http://coach.iteye.com/b ... -
spring 和rmi 的整合(转载)
2015-02-04 12:41 5237远程调用有很多种,例如: 1)远程方法调用(RMI) 2) ... -
springmvc和struts2的区别(转载)
2014-11-26 15:52 8367我们用struts2时采用的传统的配置文件的方式,并没有使 ... -
servlet/filter/listener/interceptor区别与联系(转)
2014-11-26 15:34 5271一、概念: 1、servlet: ... -
使用JUnit4测试Spring(转)
2014-07-07 18:16 11246Spring环境下的JUnit4测试 1,下载所需jar包 ... -
Spring TestContext测试框架
2014-07-07 17:21 3336直接使用Junit测试Spring程序存在的不足... 1 ... -
SpringMVC+Hibernate+Spring 简单的一个整合实例
2014-07-04 16:14 87653SpringMVC又一个漂亮的web框架,他与Struts2 ... -
Struts2、hibernate和spring下载,整合所需jar包
2014-07-04 16:00 4418ssh三个框架各自所有版本下载地址如下 Struts f ... -
Spring事务配置的五种方式(转载)
2014-06-04 11:45 2240前段时间对Spring的事务配置做了比较深入的研究,在此之 ... -
Spring,jdk定时任务的几种实现以及任务线程是串行还是并行执行(转载)
2014-03-31 17:20 12161近日项目开发中需要执行一些定时任务,比如需要在每天凌晨时候 ... -
Spring <bean>标签属性 Autowire自动装配(转载)
2014-03-31 11:21 11466在应用中,我们常常使 ... -
spring3.0注解
2013-07-29 15:39 11281.使用 @Repository、@Servi ... -
spring 抽象bean及继承(模板)
2013-07-22 17:39 14965我们在应用Spring时,在一般的设计时,肯定要用的抽象类。 ... -
Spring 定义:abstract="true" ,可适用模板
2013-07-22 17:22 2905Spring 定义:abstract="true ... -
Spring与Hibernate集成中的session问题
2013-04-15 15:53 31201.通过getSession()方法 ...
相关推荐
Quartz2.2.1基于Spring注解方式配置QuartzL,具体过程的效果看博文 http://blog.csdn.net/evankaka/article/details/45400781
最近使用了springAOP编程,文档里面包含了springAOP的代码示例及详细注释说明,使用的是注解配置模式
Spring注解
Spring注解配置中间层供Struts2使用 1.spring通过注解方式生成中间层 2.不使用Struts2的常量struts.objectFactory也可识别中间层
本文档介绍了Struts2以及spring的注解配置。
Struts2+spring注解配置 很好哦
spring2.5向spring3过渡,必学零配置注解实现Bean定义。
spring注解笔记spring注解笔记spring注解笔记spring注解笔记
全注解零配置Spring/SpringMVC/Mybatis/Swagger,工程里有初始化脚本。
spring注解Quartz定时执行功能
Spring注解注入属性
配置文件:jndi+spring注解配置
Spring注解大全,注解整理方式采用思维导图工具(XMind)整理,对注解按自己的方式进行了分类,并对所有的注解在备注中进行了解释说明;
spring 注解
要学习hibernate注解和spring注解的,可以下载, 该工程包括了hibernate注解和spring注解做的登录例子
Spring注解描述,底层笔记
Spring注解所依赖的包。com.springSource.javax.annotation
spring注解 XML配置AOP的一个实例
Spring注解驱动开发.pdf
SPring注解及页面跳转实例