在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. (数据科学学习手札12)K-means聚类实战(基于R)

    上一篇我们详细介绍了普通的K-means聚类法在Python和R中各自的实现方法,本篇便以实际工作中遇到的数据集为例进行实战说明. 数据说明: 本次实战样本数据集来自浪潮集团提供的美团的商家信息,因涉 ...

  2. python2.7练习小例子(六)

        6):题目:斐波那契数列.     程序分析:斐波那契数列(Fibonacci sequence),又称黄金分割数列,指的是这样一个数列:0.1.1.2.3.5.8.13.21.34.……. ...

  3. linux c fprintf()

    #include<stdio.h> #include<unistd.h> #include<time.h> int main(int argc,char *argv ...

  4. Linq中dbSet 的查询

    1.Find:按照关键字的ID号来查询(速度快) 如: ADShiTi aDShiTi = db.ADShiTis.Find(id); 2.FirstOrDefault:根据部分条件查询,显示最前的一 ...

  5. Android开发免费类库和工具集合

    用于Android开发的免费类库和工具集合,按目录分类. Action Bars ActionBarSherlock Extended ActionBar FadingActionBar GlassA ...

  6. ProxySQL读写分离测试(续)

      Preface       I've implemented ProxySQL on PXC yesterday but got some errors when configured query ...

  7. Windows系统的高效使用

    1-WIndows10系统的入门使用 2-如何把系统盘的用户文件转移到其他盘 3-Windows装机软件一般有哪些? 4-Windows系统有哪些比较好用的下载器? 5-Windows系统中的播放器 ...

  8. python 网络编程(远程执行命令与粘包)

    远程执行命令 先来学习一个新模块 , 一会用到的.. 新模块: subprocess 执行系统命令 r = subprocess.Popen('ls',shell=True,stdout=subpro ...

  9. Visual Studio 2014安装包

    点击下载

  10. Leetcode 686.重复叠加字符串匹配

    重复叠加字符串匹配 给定两个字符串 A 和 B, 寻找重复叠加字符串A的最小次数,使得字符串B成为叠加后的字符串A的子串,如果不存在则返回 -1. 举个例子,A = "abcd", ...