- 浏览: 1064628 次
- 性别:
- 来自: 南京
文章分类
- 全部博客 (501)
- dwr (6)
- javascript (84)
- oracle (66)
- jsp/servlet (18)
- ant (3)
- 基础知识 (12)
- EXT (10)
- My SQL (10)
- java (71)
- spring (37)
- 学习的对象 (2)
- Linux (24)
- 面试 (1)
- HTML/CSS (11)
- tomcat (11)
- 收藏夹 (2)
- Power Designer (2)
- struts.xml配置文件 (1)
- sturts2 (3)
- myeclipse (8)
- eclipse (7)
- Maven (34)
- SVN (3)
- SAP JCO (2)
- JBOSS (11)
- webservice (8)
- word (1)
- 敏捷开发 (1)
- sybase (4)
- Nexus (3)
- EhCache (3)
- log4j (3)
- Cookie (4)
- Session (4)
- CXF (7)
- AXIS (2)
- SSO (1)
- LDAP (1)
- velocity (2)
- Jquery (5)
- redis (2)
- http (4)
- dojo (1)
- Linux资源监控软件mnon的安装与运用 (1)
- notepad++ (1)
- EA (1)
- UML (1)
- JasperReports (1)
- 权限 (0)
- freemarker (4)
- Spring MVC (1)
- JMS (1)
- activeMQ (1)
- hession (3)
- 安全 (1)
- ibatis (2)
- log (1)
- nginx (1)
最新评论
-
winhbb:
我刚好遇到了一个问题(在可以依赖注入的场合有效):有两个模块A ...
解决Maven项目相互依赖/循环依赖/双向依赖的问题 -
nanjiwubing123:
long3ok 写道你好 XmlOutputFormatter ...
用XStream转换复杂XML -
zhoujianboy:
另外一个方法实现eclipse tomcat 热部署:http ...
eclipse下实现maven项目在tomcat容器热部署方法 -
long3ok:
你好 XmlOutputFormatter 请问这个类是在什么 ...
用XStream转换复杂XML -
ganbo:
总结的好,文章给力。
解决Maven项目相互依赖/循环依赖/双向依赖的问题
发现一篇好文 http://www.ibm.com/developerworks/cn/java/j-lo-spring25-ioc/ 它给出了比本文更详细的说明。
springframework 2.5引入了完整的annotaion配置注解,使用这些annotation可以大量的减少bean的定义,也使得程序开发更简单和容易维护。
当然你要使用annotation就需要使用java5以上版本。
使用annotaion定义一个bean
@Component是一个通用注解,用于说明一个类是一个spring容器管理的类。
除此之外,还有@Controller, @Service, @Repository是@Component的细化,这三个注解比@Component带有更多的语义,它们分别对应了表现层、服务层、持久层的类。
如果你只是用它们定义bean,你可以仅使用@Component,但是既然spring提供这些细化的注解,那肯定有使用它们的好处,不过在以下的例子中体现不出。
定义了一个接口
package test1;
interface MovieFinder {
String getData();
}
定义一个实现
package test1;
import org.springframework.stereotype.Repository;
@Repository
public class JpaMovieFinder implements MovieFinder {
@Override
public String getData() {
return "This is JpaMovieFinder implementation!";
}
}
这里使用了注解@Repository,说明这是一个受spring容器管理的bean定义,这个注解没有指定bean的名字,默认为小写开头的类名,就是jpaMovieFinder,如果你要指定名字,可以这样写@Repository("myMovieFinder")。
这里也可以使用@Component这个注解,在这里例子中体现不出用@Repository的好处。
这里没有指定这个bean的scope,缺省是singleton,如果你要其他scope,可以使用注解@Scope
@Scope("prototype")
@Repository
public class MovieFinderImpl implements MovieFinder {
// ...
}
spring扫描并注册注解的bean
JpaMovieFinder只是添加了一个注解,这并不会自动被注册到spring容器中,我们需要告诉spring容器到那里去寻找这些bean。
配置如下:
<?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="test1"/>
</beans>
<context:component-scan base-package="test1"/>这个配置告诉spring容器到test1这个package下去扫描所有的类,从而找到被注解的类。
由于并不是test1下的所有的类都有注解,全部遍历效率不高,所以spring定义了过滤器用于减小扫描范围,这里为了简单起见没有使用。
使用注解进行依赖注入
package test1;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class SimpleMovieLister {
@Autowired
private MovieFinder movieFinder;
public String getData(String name) {
return "Hi " + name + "! " + movieFinder.getData();
}
public MovieFinder getMovieFinder() {
return movieFinder;
}
public void setMovieFinder(MovieFinder movieFinder) {
this.movieFinder = movieFinder;
}
}
SimpleMovieLister是一个服务类,它也使用了@Service注解为了bean,这个类用到了MovieFinder,为了注入这个类的实现,这里使用了注解@Autowired,spring容器会自动找到合适的bean注入进去。注意这里并没有指定被注入bean的名字,因为spring根据只发现了一个实现,那就是jpaMovieFinder。后面,我们会看到有两个实现会怎样。
注意,上面代码使用@Autowired时,public void setMovieFinder(MovieFinder movieFinder) 这个方法是不需要的,你可以把它删除了试一试。如果你使用xml的配置方式,该方法必须存在。我这里保留该方法,是为了后面测试注解和xml配置混合使用的方式。
测试1
package test1;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Main {
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("test1/beans.xml");
SimpleMovieLister m = (SimpleMovieLister)context.getBean("simpleMovieLister");
System.out.println(m.getData("Arthur"));
}
}
控制台上会打印 Hi Arthur! This is JpaMovieFinder implementation!
增加MovieFinder的第二个实现
package test1;
import org.springframework.stereotype.Repository;
@Repository
public class IbatisMovieFinder implements MovieFinder {
@Override
public String getData() {
return "This is IbatisMovieFinder implementation!";
}
}
这时运行Main,系统会报错:
Exception in thread "main" org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'simpleMovieLister': Injection of resource fields failed; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No unique bean of type [test1.MovieFinder] is defined: expected single matching bean but found 2: [jpaMovieFinder, ibatisMovieFinder]
从错误信息中我们可以看到现在MovieFinder有两个bean实现了,一个是jpaMovieFinder,另一个是ibatisMovieFinder,spring容器不知道应该使用哪一个bean。这时可以使用注解@Qualifier指定具体的bean。
//...
@Service
public class SimpleMovieLister {
@Autowired
@Qualifier("ibatisMovieFinder")
private MovieFinder movieFinder;
//...
这里我们指定注入的是ibatisMovieFinder这个bean。
运行Main, 控制台上会打印 Hi Arthur! This is IbatisMovieFinder implementation!
Java6提供的注入注解
spring也可以使用java6提供的@Resource注解来指定注入哪一个bean。
//...
@Service
public class SimpleMovieLister {
@Resource(name="ibatisMovieFinder")
private MovieFinder movieFinder;
//...
这和@Autowired功能是一致的。
使用注解还是xml
使用注解很方便,但从上面的例子我们也可以看出注解的问题,MovieFinder有两个实现,SimpleMovieLister是在程序中用注解指定了使用哪一个实现,如果要修改,需要修改源程序。所以,注解只适用于固定依赖的情况。如果依赖需要在部署的时候做调整,那还是使用xml的配置方式方便,毕竟只需要修改一下xml文件即可。
实际使用时,我们可以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="test1"/>
<bean id="simpleMovieLister1" class="test1.SimpleMovieLister">
<property name="movieFinder" ref="jpaMovieFinder" />
</bean>
</beans>
使用xml配置方式定义了另外一bean,注入了jpaMovieFinder这个实现。
package test1;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Main {
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("test1/beans.xml");
SimpleMovieLister m = (SimpleMovieLister)context.getBean("simpleMovieLister");
System.out.println(m.getData("Arthur"));
SimpleMovieLister m1 = (SimpleMovieLister)context.getBean("simpleMovieLister1");
System.out.println(m1.getData("Arthur"));
}
}
simpleMovieLister是从注解来的,simpleMovieLister1是从xml配置来的。运行结果:
Hi Arthur! This is IbatisMovieFinder implementation!
Hi Arthur! This is JpaMovieFinder implementation!
证明混合使用是可行的,你可以继续测试,用xml重新配置simpleMovieLister。
因此,即使我一开始使用了注解,之后我后悔了,没有关系,不用修改源程序,以前用xml怎么配置现在还是怎么配置。
springframework 2.5引入了完整的annotaion配置注解,使用这些annotation可以大量的减少bean的定义,也使得程序开发更简单和容易维护。
当然你要使用annotation就需要使用java5以上版本。
使用annotaion定义一个bean
@Component是一个通用注解,用于说明一个类是一个spring容器管理的类。
除此之外,还有@Controller, @Service, @Repository是@Component的细化,这三个注解比@Component带有更多的语义,它们分别对应了表现层、服务层、持久层的类。
如果你只是用它们定义bean,你可以仅使用@Component,但是既然spring提供这些细化的注解,那肯定有使用它们的好处,不过在以下的例子中体现不出。
定义了一个接口
package test1;
interface MovieFinder {
String getData();
}
定义一个实现
package test1;
import org.springframework.stereotype.Repository;
@Repository
public class JpaMovieFinder implements MovieFinder {
@Override
public String getData() {
return "This is JpaMovieFinder implementation!";
}
}
这里使用了注解@Repository,说明这是一个受spring容器管理的bean定义,这个注解没有指定bean的名字,默认为小写开头的类名,就是jpaMovieFinder,如果你要指定名字,可以这样写@Repository("myMovieFinder")。
这里也可以使用@Component这个注解,在这里例子中体现不出用@Repository的好处。
这里没有指定这个bean的scope,缺省是singleton,如果你要其他scope,可以使用注解@Scope
@Scope("prototype")
@Repository
public class MovieFinderImpl implements MovieFinder {
// ...
}
spring扫描并注册注解的bean
JpaMovieFinder只是添加了一个注解,这并不会自动被注册到spring容器中,我们需要告诉spring容器到那里去寻找这些bean。
配置如下:
<?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="test1"/>
</beans>
<context:component-scan base-package="test1"/>这个配置告诉spring容器到test1这个package下去扫描所有的类,从而找到被注解的类。
由于并不是test1下的所有的类都有注解,全部遍历效率不高,所以spring定义了过滤器用于减小扫描范围,这里为了简单起见没有使用。
使用注解进行依赖注入
package test1;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class SimpleMovieLister {
@Autowired
private MovieFinder movieFinder;
public String getData(String name) {
return "Hi " + name + "! " + movieFinder.getData();
}
public MovieFinder getMovieFinder() {
return movieFinder;
}
public void setMovieFinder(MovieFinder movieFinder) {
this.movieFinder = movieFinder;
}
}
SimpleMovieLister是一个服务类,它也使用了@Service注解为了bean,这个类用到了MovieFinder,为了注入这个类的实现,这里使用了注解@Autowired,spring容器会自动找到合适的bean注入进去。注意这里并没有指定被注入bean的名字,因为spring根据只发现了一个实现,那就是jpaMovieFinder。后面,我们会看到有两个实现会怎样。
注意,上面代码使用@Autowired时,public void setMovieFinder(MovieFinder movieFinder) 这个方法是不需要的,你可以把它删除了试一试。如果你使用xml的配置方式,该方法必须存在。我这里保留该方法,是为了后面测试注解和xml配置混合使用的方式。
测试1
package test1;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Main {
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("test1/beans.xml");
SimpleMovieLister m = (SimpleMovieLister)context.getBean("simpleMovieLister");
System.out.println(m.getData("Arthur"));
}
}
控制台上会打印 Hi Arthur! This is JpaMovieFinder implementation!
增加MovieFinder的第二个实现
package test1;
import org.springframework.stereotype.Repository;
@Repository
public class IbatisMovieFinder implements MovieFinder {
@Override
public String getData() {
return "This is IbatisMovieFinder implementation!";
}
}
这时运行Main,系统会报错:
Exception in thread "main" org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'simpleMovieLister': Injection of resource fields failed; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No unique bean of type [test1.MovieFinder] is defined: expected single matching bean but found 2: [jpaMovieFinder, ibatisMovieFinder]
从错误信息中我们可以看到现在MovieFinder有两个bean实现了,一个是jpaMovieFinder,另一个是ibatisMovieFinder,spring容器不知道应该使用哪一个bean。这时可以使用注解@Qualifier指定具体的bean。
//...
@Service
public class SimpleMovieLister {
@Autowired
@Qualifier("ibatisMovieFinder")
private MovieFinder movieFinder;
//...
这里我们指定注入的是ibatisMovieFinder这个bean。
运行Main, 控制台上会打印 Hi Arthur! This is IbatisMovieFinder implementation!
Java6提供的注入注解
spring也可以使用java6提供的@Resource注解来指定注入哪一个bean。
//...
@Service
public class SimpleMovieLister {
@Resource(name="ibatisMovieFinder")
private MovieFinder movieFinder;
//...
这和@Autowired功能是一致的。
使用注解还是xml
使用注解很方便,但从上面的例子我们也可以看出注解的问题,MovieFinder有两个实现,SimpleMovieLister是在程序中用注解指定了使用哪一个实现,如果要修改,需要修改源程序。所以,注解只适用于固定依赖的情况。如果依赖需要在部署的时候做调整,那还是使用xml的配置方式方便,毕竟只需要修改一下xml文件即可。
实际使用时,我们可以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="test1"/>
<bean id="simpleMovieLister1" class="test1.SimpleMovieLister">
<property name="movieFinder" ref="jpaMovieFinder" />
</bean>
</beans>
使用xml配置方式定义了另外一bean,注入了jpaMovieFinder这个实现。
package test1;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Main {
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("test1/beans.xml");
SimpleMovieLister m = (SimpleMovieLister)context.getBean("simpleMovieLister");
System.out.println(m.getData("Arthur"));
SimpleMovieLister m1 = (SimpleMovieLister)context.getBean("simpleMovieLister1");
System.out.println(m1.getData("Arthur"));
}
}
simpleMovieLister是从注解来的,simpleMovieLister1是从xml配置来的。运行结果:
Hi Arthur! This is IbatisMovieFinder implementation!
Hi Arthur! This is JpaMovieFinder implementation!
证明混合使用是可行的,你可以继续测试,用xml重新配置simpleMovieLister。
因此,即使我一开始使用了注解,之后我后悔了,没有关系,不用修改源程序,以前用xml怎么配置现在还是怎么配置。
发表评论
-
Spring MVC 3.1新特性 生产者、消费者请求限定
2015-06-15 07:42 715参考地址: http://www.iteye.com/to ... -
CSRF TOKEN
2015-02-14 18:02 1146package com.uncle5.pubrub.web.c ... -
Spring MVC Controller单例陷阱
2014-06-27 08:51 682Spring MVC Controller默认是 ... -
[Spring] Hessian权限认证,加密前面
2014-03-06 09:52 1615Hessian的一些基本简介已经在上一节已经全部介绍了,上一节 ... -
FieldRetrievingFactoryBean 和 MethodInvokingFactoryBean
2014-01-09 18:36 1021spring提供了filed的值注入和method的返回值注入 ... -
Spring中ApplicationContext的事件机制(二 内定事件)
2014-01-09 11:08 12342在Spring中已经定义了五个标准事件,分别介绍如下: 1) ... -
当spring 容器初始化完成后执行某个方法 .
2014-01-08 17:40 1444在某些应用中,我们希望,当spring 容器将所有的bea ... -
spring学习之springMVC 返回类型选择 以及 SpringMVC中model,modelMap.request,session取值顺序
2013-09-12 10:43 1215spring mvc处理方法支持如下的返回方式:ModelA ... -
JSR-303
2013-09-12 00:22 932JSR-303 是JAVA EE 6 中的一项子规范,叫做Be ... -
EHCACHE分布式缓存
2013-09-06 17:26 1314从1.2版本开始,Ehcache可 ... -
springMVC+freemarker整合
2013-09-06 16:39 1435springMVC整合大家都比较熟悉了吧主要有以下几个步骤: ... -
Spring MVC 学习笔记 Viewresol和View
2013-09-06 15:34 931Spring MVC使用ViewResolver来根据cont ... -
Spring的PropertyPlaceholderConfigurer应用
2013-09-06 15:04 3223Spring 利用PropertyPlaceholderCon ... -
SpringSecurity3_Logout
2013-08-22 16:07 2584Logout¶•退出登录的链接 <a href=&quo ... -
spring的default-lazy-init参数 .
2013-04-23 20:08 979spring在启动的时候,会默认加载会默认加载整个对象实例图, ... -
Spring MVC 如何防止XSS、SQL注入攻击
2013-04-16 15:40 1684在Web项目中,通常需要处理XSS,SQL注入攻击,解决这个问 ... -
Spring JMS
2013-01-08 10:48 986http://blog.csdn.net/shiqiang12 ... -
给spring jdbctemplate加上一层“绮丽外衣”-动态SQL&&SQL语句以文件存放
2013-01-07 16:00 3307给spring jdbctemplate加上一层“华丽外衣”- ... -
使用Spring的NamedParameterJdbcTemplate完成DAO操作 .
2013-01-07 14:54 1186NamedParameterJdbcTemplate内部包含了 ... -
cron表达式(quartz中时间表达式)
2012-12-20 15:54 1003http://sosuny.iteye.com/blog/46 ...
相关推荐
在Spring框架中,Annotation配置是一种简洁且强大的方式来管理Bean的定义和依赖注入,它消除了传统的XML配置文件,使得代码更加简洁、易读。在Spring 3.0及以上版本中,Annotation配置得到了广泛的应用。 首先,...
Spring Bean 加载过程源码解析文档 Spring Bean 加载过程是 Spring 框架中...通过分析 SpringApplication 的源码,我们可以更好地理解 Spring Bean 加载过程的实现细节,并且能够更好地使用 Spring 框架开发应用程序。
在Spring框架中,注解(Annotation)的使用极大地简化了传统XML配置的复杂性,使得开发者可以更加专注于业务逻辑的实现。本篇文章将深入探讨如何通过注解将配置资源注入到Bean中,以此来理解Spring的注解驱动开发。 ...
Spring框架提供了多种方式来实现Bean,例如使用XML配置文件、使用Annotation配置等。 1. 使用XML配置文件:可以在XML配置文件中配置Bean的生命周期和作用域。 2. 使用Annotation配置:可以使用Annotation来配置Bean...
Spring注解的使用大大减少了XML配置,提高了代码的可读性和维护性。理解并熟练运用这些注解是每个Spring开发者必备的技能。在实际开发中,根据项目需求选择合适的注解,可以有效地组织和管理代码,提升开发效率。
当在类的字段或构造器上使用`@Autowired`时,Spring会自动寻找类型匹配的bean并注入。此外,还可以通过`@Qualifier`注解指定要注入的具体bean。 2. **@Component, @Service, @Repository, @Controller**:这些注解...
使用 @Autowired 注解可以简化属性的注入过程,减少了配置文件的数量,提高了代码的可读性和维护性。 4. @Autowired 注解的注意事项 在使用 @Autowired 注解时,需要注意以下几点: * @Autowired 注解只能用于 ...
Annotation是一种元数据,允许开发者在代码中嵌入额外的信息,Spring则能够读取这些信息来实现其功能,如自动装配Bean、定义切点和通知等。 #### 二、Annotation在Spring中的应用 ##### 1. `@Autowired`与依赖注入...
总的来说,获取非Spring管理组件中的SpringBean主要有两种方式:一是通过实现`ApplicationContextAware`接口并存储ApplicationContext,二是使用注解和静态内部类来注入BeanFactory。这两种方法都是Spring框架提供的...
### Spring的Annotation方式详解 #### 引言 随着Spring框架的发展,其依赖注入(DI)机制也经历了从XML配置向注解驱动的重大转变。自Spring 3.0版本起,框架引入了一系列注解来简化依赖配置,使得开发人员能够在不...
在本文中,我们将探讨如何将Direct Web Remoting (DWR) 3.0与Spring 2.5框架整合,并利用注解(Annotation)进行配置。DWR是一个允许JavaScript与Java服务器端进行交互的库,而Spring 2.5引入了对注解的强大支持,...
综上所述,Spring框架的配置文件是其核心组成部分之一,通过合理的配置,可以有效地管理应用程序中的Bean及其实现的各种功能。掌握Spring配置文件的编写方法对于开发基于Spring的应用程序至关重要。
总结起来,Spring的自动扫描和管理Bean功能是通过组件扫描和注解驱动配置实现的,这大大减少了手动配置的繁琐工作,提高了开发效率。了解并熟练掌握这些概念对于任何Spring开发者来说都是至关重要的。
我们需要添加一个名为`spring-mvc`的Servlet定义,使用`org.springframework.web.servlet.DispatcherServlet`作为Servlet类。`load-on-startup`元素设置为1,表示该Servlet将在Web应用程序启动时加载。`servlet-...
Spring 3.0 开始引入了基于 Annotation 的依赖注入,极大地简化了配置过程。以下是关于 Spring 3.0 基于 Annotation 的依赖注入实现的详细说明: 1. **注解驱动的 Bean 定义**: - 使用 `@Component`、`@Service`...
Spring Annotation和Maven的结合使用是现代Java项目中常见的配置方式,它们为开发者提供了高效、灵活的开发环境。本篇文章将深入探讨Spring注解和Maven的配置及其重要性。 **Spring注解** Spring注解是Spring框架...
### Spring使用Annotation整合DWR知识点解析 #### 一、概览 在现代Web开发中,Direct Web Remoting(简称DWR)是一种简化Ajax应用开发的技术,它允许JavaScript直接调用服务器端的Java方法,而无需编写复杂的XML...
在Spring框架中,注解(Annotation)的使用极大地简化了依赖注入(Dependency Injection,简称DI)的过程,使得代码更加简洁且易于维护。本篇将详细探讨"3Spring使用annotation方式autowire"这一主题,包括注解驱动...
早期的Spring项目多采用XML配置,而现在更多地倾向于使用Java配置或者基于注解的配置,因为它们更直观且易于维护。 1. XML配置: 创建一个名为`applicationContext.xml`的文件,这是Spring的主配置文件。在其中,...