我们在以前学习 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>
在上面的示例中,我们可以典型的看到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;
- }
- }
使用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,环绕通知,放在方法头上,这个方法要决定真实的方法是否执行,而且必须有返回值。
分享到:
相关推荐
标题《spring3零配置注解实现Bean定义》中蕴含的知识点主要包括Spring框架中的Bean定义配置方法的演进,特别是从Spring 2.5到Spring 3版本的过渡过程中,对于注解方式实现Bean定义的支持如何被引入和优化。...
本项目"Struts+Spring+Hibernate注解零配置整合"的目标是展示如何通过注解方式实现这三大框架的无缝集成,从而减少XML配置文件的使用,提高开发效率和代码可读性。 在传统的Struts、Spring和Hibernate整合中,大量...
在这个"struts2.3.4.1+spring-3.2.0.M2注解零配置"的示例中,我们将探讨如何使用注解来实现这两个框架的整合,从而达到无XML配置的简洁开发方式。Eclipse 7.0作为开发工具,与JDK 7.0的组合,为开发者提供了高效的...
#### 九、Spring3注解零配置 - **组件扫描**:使用@ComponentScan注解进行组件扫描,自动发现并注册组件。 - **配置类**:使用@Configuration注解定义配置类,替代XML配置文件。 - **自动装配**:通过@Autowired注解...
在全注解零配置的模式下,Spring通过`@Configuration`和`@Bean`注解来替代XML配置文件,简化了bean的声明和管理。例如,`@Component`、`@Service`、`@Repository`和`@Controller`注解用于标记不同层次的组件,使得...
### Spring3零配置注解实现Bean定义 #### 概述 在Spring框架中,传统的Bean定义方式主要依赖于XML配置文件。随着技术的发展与需求的变化,Spring为了简化配置过程,引入了注解的方式进行Bean的定义。这不仅减少了...
SSH框架集成注解零配置是现代Java Web开发中一种高效且流行的方式,SSH指的是Spring、Struts和Hibernate这三个开源框架的首字母缩写。Spring负责依赖注入和事务管理,Struts处理MVC模式中的控制器部分,而Hibernate...
在Spring框架中,零配置(Zero Configuration)是一种提倡的理念,旨在减少XML配置文件的使用,转而使用注解来管理Bean的定义。本教程聚焦于Spring3中的注解配置,帮助开发者更高效、简洁地实现Bean的声明和管理。...
这个“struts2.3.4.1+spring3.2.0.M2+hibernate4.1.8注解零配置”项目是一个演示了如何在不编写XML配置文件的情况下,仅通过注解来实现一个简单的登录应用。 **Struts2** 是一个流行的MVC框架,它负责处理HTTP请求...
这个整合包被称为"SSH全注解零配置整合",意味着它利用了注解来减少XML配置文件的数量,使得项目设置更加简洁和高效。以下是这些技术及其集成的关键知识点: 1. **Struts2**: - **注解配置**:Struts2允许开发者...
3. **Spring3注解零配置**: 这部分内容将介绍Spring3的注解驱动配置,它简化了XML配置文件,使代码更加简洁。例如,@Component、@Service、@Repository和@Controller注解用于标记bean,而@Autowired用于依赖注入。...
#### 二、Spring注解图示与分类 ##### 2.1 Spring-Context 模块的注解图 - **@Component**: 用于标记任何Java类作为Spring中的一个组件。该注解通常配合`<context:component-scan>`使用,以便Spring能够自动检测和...
在Hibernate方面,虽然其本身并不提供“零配置”,但通过Spring Boot,我们可以很容易地配置Hibernate。Spring Boot会自动识别`pom.xml`中的ORM库,并设置默认的SessionFactory。同时,我们还可以使用`@Entity`注解...
总的来说,“spring+springmvc+jpa零配置注解开发”意味着使用Spring框架、Spring MVC以及JPA,通过注解来替代XML配置,实现高效且简洁的Java Web应用开发。这样的开发方式提高了代码的可读性和可维护性,同时也降低...
SSH框架整合,全jpa注解真正的零配置。 struts2.3.8 spring3.2 hibernate4.1.9. 带有分页,全局异常,权限拦截器,session过滤等功能。 内有jar包。导入开发工具后部署既可跑起来。已做了简单的数据库操作功能。供...
这个"Spring+Spring MVC+MyBatis之零配置之路源代码"项目旨在展示如何在不使用XML配置的情况下,通过Java配置和注解驱动的方式来搭建一个完整的SSM(Spring、Spring MVC、MyBatis)应用。 Spring框架作为基础,提供...
在这个"struts2.3.4.1注解零配置"的例子中,我们将深入探讨如何利用Struts2的注解来构建一个简单的登录系统。 首先,了解Struts2的核心概念是必要的。Struts2是一个基于MVC(Model-View-Controller)设计模式的框架...
**零配置**:"零配置"通常指的是减少或消除XML配置文件,转而使用Java注解来配置应用。这样做的好处是减少了配置文件的复杂性,使得代码更易于理解和维护。 **MyEclipse集成**:MyEclipse是一款强大的Java EE集成...
在本篇【从零开始学Spring Boot】系列教程中,我们将深入探讨如何在Spring Boot项目中导入并使用XML配置。Spring Boot以其简化Spring应用的初始搭建以及开发过程而闻名,通常推崇的是Java配置而非XML配置。然而,在...
标题 "零配置spring 整合cxf" 涉及的是在Spring框架中与Apache CXF服务集成,而无需繁琐的XML配置。Apache CXF是一个开源的Java框架,主要用于构建和开发服务导向架构(SOA)的应用程序。它支持多种Web服务标准,...