在spring framework中,IOC的配置是最基础的部分,常见的配置方式有基于xml文件和基于注解的配置方式。除了这两种配置方式之外,今天这里再介绍另一种配置方式,先用小demo重温下我们熟悉的两种配置方式。

  UserService调用UserDao中的login(String username, String password)方法。

  一、基于XML配置文件的方式

    UserDao.java

 package org.lizf.demo;

 public class UserDao {

     public void login(String username, String password) {
System.out.println("login : " + username);
} }

    UserService.java

 package org.lizf.demo;

 public class UserService {

     private UserDao userDao;

     public void login(String username, String password) {
userDao.login(username, password);
} public void setUserDao(UserDao userDao) {
this.userDao = userDao;
} }

    spring-context.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"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="userDao" class="org.lizf.demo.UserDao" /> <bean id="userService" class="org.lizf.demo.UserService" >
<property name="userDao" ref="userDao" />
</bean> </beans>

    Main.java测试类:

 package org.lizf.demo;

 import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext; public class Main { public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("spring-context.xml");
UserService userService = (UserService) context.getBean("userService");
userService.login("admin", "****");
} }

    执行结果:

七月 19, 2016 1:28:17 上午 org.springframework.context.support.ClassPathXmlApplicationContext prepareRefresh
信息: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@5010be6: startup date [Tue Jul 19 01:28:17 CST 2016]; root of context hierarchy
七月 19, 2016 1:28:17 上午 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
信息: Loading XML bean definitions from class path resource [spring-context.xml]
login : admin

  二、基于注解的配置方式

    UserDao.java:

 package org.lizf.demo;

 import org.springframework.stereotype.Repository;

 @Repository
public class UserDao { public void login(String username, String password) {
System.out.println("login : " + username);
} }

    UserService.java:

 package org.lizf.demo;

 import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository; @Service
public class UserService { @Autowired
private UserDao userDao; public void login(String username, String password) {
userDao.login(username, password);
} }

    spring-context.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.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd"> <context:component-scan base-package="org.lizf.demo" /> </beans>

    Main.java测试类:

 package org.lizf.demo;

 import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext; public class Main { public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("spring-context.xml");
UserService userService = (UserService) context.getBean("userService");
userService.login("admin", "****");
} }

    输出结果:

七月 19, 2016 1:40:40 上午 org.springframework.context.support.ClassPathXmlApplicationContext prepareRefresh
信息: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@5010be6: startup date [Tue Jul 19 01:40:40 CST 2016]; root of context hierarchy
七月 19, 2016 1:40:40 上午 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
信息: Loading XML bean definitions from class path resource [spring-context.xml]
login : admin

  三、基于Java类的配置方式

    UserDao.java:

 package org.lizf.demo;

 public class UserDao {

     public void login(String username, String password) {
System.out.println("login : " + username);
} }

    UserService.java:

 package org.lizf.demo;

 public class UserService {

     private UserDao userDao;

     public void login(String username, String password) {
userDao.login(username, password);
} public void setUserDao(UserDao userDao) {
this.userDao = userDao;
} }

    SpringConfig.java 配置类:

 package org.lizf.demo;

 import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; //标注这是一个配置类
@Configuration
public class SpringConfig { //标注这是一个Bean
@Bean
public UserDao userDao() {
return new UserDao();
} @Bean
public UserService userService() {
UserService userService = new UserService();
UserDao userDao = userDao();
userService.setUserDao(userDao);
return userService;
} }

    Main.java测试类:

 package org.lizf.demo;

 import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext; public class Main {
public static void main(String[] args) {
//这里使用AnnotationConfigApplicationContext来创建ApplicationContext
ApplicationContext context = new AnnotationConfigApplicationContext(SpringConfig.class);
UserService userService = (UserService) context.getBean("userService");
userService.login("admin", "****");
}
}

    输出结果:

七月 19, 2016 1:53:55 上午 org.springframework.context.annotation.AnnotationConfigApplicationContext prepareRefresh
信息: Refreshing org.springframework.context.annotation.AnnotationConfigApplicationContext@179d3b25: startup date [Tue Jul 19 01:53:55 CST 2016]; root of context hierarchy
login : admin

    如果需要对多个Config类进行加载,可以使用如下方式:

 package org.lizf.demo;

 import org.springframework.context.annotation.AnnotationConfigApplicationContext;

 public class Main {
public static void main(String[] args) {
//如果有多个Config类,可以用下边的方式初始化
AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext();
//regiester方法接受可变参数,传入多个Config类
ctx.register(SpringConfig.class, SpringConfig2.class, SpringConfig3.class);
//刷新ApplicationContext使配置生效
ctx.refresh();
}
}

Spring随笔 —— IOC配置的三种不同方式简介的更多相关文章

  1. 【转】Spring学习---Bean配置的三种方式(XML、注解、Java类)介绍与对比

    [原文]https://www.toutiao.com/i6594205115605844493/ Spring学习Bean配置的三种方式(XML.注解.Java类)介绍与对比 本文将详细介绍Spri ...

  2. Spring事务Transaction配置的五种注入方式详解

    Spring事务Transaction配置的五种注入方式详解 前段时间对Spring的事务配置做了比较深入的研究,在此之间对Spring的事务配置虽说也配置过,但是一直没有一个清楚的认识.通过这次的学 ...

  3. 02 Spring框架 简单配置和三种bean的创建方式

    整理了一下之前学习Spring框架时候的一点笔记.如有错误欢迎指正,不喜勿喷. 上一节学习了如何搭建SpringIOC的环境,下一步我们就来讨论一下如何利用ioc来管理对象和维护对象关系. <? ...

  4. Spring学习日记01_IOC_xml的三种注入方式

    什么是IOC 控制反转,把对象创建和对象之间的调用过程,交给Spring进行管理 使用IOC目的:为了耦合度降低 做入门案例就是IOC实现 IOC底层原理 xml解析 工厂模式 反射 原始方式 cla ...

  5. Spring事务之详解--三种实现方式

    实现购买股票案例: 一.引入JAR文件: 二.开始搭建分层架构---创建账户(Account)和股票(Stock)实体类 Account: /* * 账户 */ public class Accoun ...

  6. Spring bean的bean的三种实例化方式

     Bean 定义 被称作 bean 的对象是构成应用程序的支柱也是由 Spring IoC 容器管理的.bean 是一个被实例化,组装,并通过 Spring IoC 容器所管理的对象.这些 bean ...

  7. spring.handlers、spring.schemas、spring.tooling被覆盖的三种解决方式

    在用到spring时,本地IDE里面跑的很正常,但是打jar包后在集群上运行时报错. 查找资料后确定了问题的根源,由于在依赖中调用了spring的许多包,每个包都有自己的spring.schemas文 ...

  8. Linux vsftpd服务配置以及三种验证方式以及常见错误解决办法

    文件传输协议(FTP): 文件传输协议(FTP,File Transfer Protocol),即能够让用户在互联网中上传.下载文件的文件协议,而FTP服务器就是支持FTP传输协议的主机,要想完成文件 ...

  9. linux配置redis三种启动方式

    下载 wget http://download.redis.io/releases/redis-4.0.9.tar.gz 解压 tar -xzf redis-4.0.9.tar.gz -C /usr/ ...

随机推荐

  1. 函数:引用file类对象及io类对象作为参数打印文本及显示文本

    #include <iostream> #include <fstream> #include <cstdlib> using namespace std; voi ...

  2. (数据科学学习手札14)Mean-Shift聚类法简单介绍及Python实现

    不管之前介绍的K-means还是K-medoids聚类,都得事先确定聚类簇的个数,而且肘部法则也并不是万能的,总会遇到难以抉择的情况,而本篇将要介绍的Mean-Shift聚类法就可以自动确定k的个数, ...

  3. LOOP AT SCREEN

    用法 主に.画面の属性を変更させるために使用する. 照会モードでは入力不可とするが入力可能モードでは入力可能とする.ラジオボタンAが選択された場合はラジオボタンBに関連する項目は非表示とするなど.   ...

  4. python第一个程序-->hello world

    最近在网上看到一个小笑话,一个程序员的自我嘲讽:“我精通所以计算机语言的hello world!” 好了,废话不多说了,开始撸代码: 我本人用的是python3.6版本,各位可以通过官网下载自己喜欢的 ...

  5. ISE中FPGA的实现流程

    一.ISE实现的步骤         在综合之后,我们开始启动FPGA在ISE中的实现过程,整个过程包括以下几个步骤:                 1.Translate              ...

  6. springmvc 配置多视图(jsp,freemarker,HTML等)

    SpringMVC 的 Controller 可以返回各种各样的视图.比如 JSP, JSON, Velocity, FreeMarker, XML, PDF, Excel, 还有Html字符流 等等 ...

  7. 20145202 《Java程序设计》实验五实验报告

    一.实验内容 1.用书上的TCP代码,实现服务器与客户端. 2.客户端与服务器连接 3.客户端中输入明文,利用DES算法加密,DES的秘钥用RSA公钥密码中服务器的公钥加密,计算明文的Hash函数值, ...

  8. Odoo8中安装新模块找不到的问题

    为了要让系统识别出新的模块,我们需要打开用户的技术特性选项,具体在    左侧栏目->用户->administrator,  将技术特性勾选上,刷新.  然后左侧栏目->模块下面就会 ...

  9. 在编程的时候,NotePad++ 中闪烁的光标突然有竖着闪烁的编程蓝色下划线闪烁的--小技巧告诉你-费元星

    当在写代码时出现的光标闪烁(横线闪烁) 在键盘上找 Insert ,按这个Insert就可以把横向闪烁光标( _ )修改成竖向闪烁光标样式( | ),横向光标会在你写代码的时候修改前面的代码,把光标移 ...

  10. Bash中使用MySQL导入导出CSV格式数据[转]

    转自: http://codingstandards.iteye.com/blog/604541 MySQL中导出CSV格式数据的SQL语句样本如下:   select * from test_inf ...