无xml配置的实现
-
自Spring3.X 以后 spring 提供了很多的注解来代替XML文件的配置,最核心的是下面两个注解。
- ::@Configuration:: 标注该类是配置类,类似于我们定义的applicationContext.xml
- ::@Bean:: 类似于我们在之前的spring配置文件中配置的
<bean id=" " class="">
有了上面两个注解我们可以用编码的方式来完成spring 的相关配置,接下来我们就来使用java编码的方式来实现spring配置
1、新建一个工程,里面是使用原生Spring实现无配置文件。
— 建立July-javaconfig 工程
— 在pom.xml中加入一下内容:
<properties>
<java.version>1.8</java.version>
<spring.version>5.0.8.RELEASE</spring.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>${spring.version}</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
这里使用spring 5.0.8.RELEASE 版本。
— 在工程中新建包 cn.org.july.spring.service
— 在该包下新建Class HelloService.class
,该service 实现一个方法sayHello(),代码如下:
package cn.org.july.spring.service;
/***
* @author***wanghongjie*
* 2018-10-26*
**/
public class HelloService {
public String sayHello(){
return "Hello JavaConfig.....";
}
}
— 在该目录下创建Class ApplicationConfiguration
,该类相当于定义了一个applicationContext.xml。
在ApplicationConfiguration.class 中定义一个方法,该方法获取HelloService
。代码如下:
package cn.org.july.spring.service;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/***
* 使用 ApplicationConfiguration 代替 配置文件*
* @author wanghongjie
*/
@Configuration //相当于定义了一个applicationContext.xml
public class ApplicationConfiguration {
@Bean // 相当于在applicationContext.xml中定义一个bean标签
public HelloService helloService(){
return new HelloService();
}
}
— 创建测试类:Application.class
,这里引入一个新的ClassAnnotationConfigApplicationContext
对象。通过该类来加载Spring上下文信息。
存在applicationContext.xml
public static void main(String[] args) {
//所有配置文件
args = new String[] {
"classpath:spring/spring-servlet.xml",
"classpath:spring/ApplicationContext.xml",
"classpath:spring/mybatis-config.xml",
};
ApplicationContext actx = new ClassPathXmlApplicationContext(args);
//得到类的实例
HelloService helloService = (HelloService) actx.getBean("helloService");
//调用类的方法
helloService.sayHello();
}
— 不使用applicationContext.xml文件获取Spring上下文信息。
package cn.org.july.spring.service;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
public class Application {
public static void main(String[] args) {
// 获取spring 容器。
AnnotationConfigApplicationContext configApplicationContext
= new AnnotationConfigApplicationContext(ApplicationConfiguration.class);
//从spring容器中获取bean
HelloService helloService = configApplicationContext.getBean(HelloService.class);
//方法调用
String value = helloService.sayHello();
System.*out*.printf(value);
}
}
项目结构如下:
运行结果:
以上是两种启动方式对比。