Spring随笔 —— IOC配置的三种不同方式简介

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

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

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

    UserDao.java

1 package org.lizf.demo;
2
3 public class UserDao {
4
5     public void login(String username, String password) {
6         System.out.println("login : " + username);
7     }
8
9 }

    UserService.java

 1 package org.lizf.demo;
 2
 3 public class UserService {
 4
 5     private UserDao userDao;
 6
 7     public void login(String username, String password) {
 8         userDao.login(username, password);
 9     }
10
11     public void setUserDao(UserDao userDao) {
12         this.userDao = userDao;
13     }
14
15 }

    spring-context.xml配置文件

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <beans xmlns="http://www.springframework.org/schema/beans"
 3     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 4     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
 5
 6     <bean id="userDao" class="org.lizf.demo.UserDao" />
 7
 8     <bean id="userService" class="org.lizf.demo.UserService" >
 9         <property name="userDao" ref="userDao" />
10     </bean>
11
12 </beans>

    Main.java测试类:

 1 package org.lizf.demo;
 2
 3 import org.springframework.context.ApplicationContext;
 4 import org.springframework.context.support.ClassPathXmlApplicationContext;
 5
 6 public class Main {
 7
 8     public static void main(String[] args) {
 9         ApplicationContext context = new ClassPathXmlApplicationContext("spring-context.xml");
10         UserService userService = (UserService) context.getBean("userService");
11         userService.login("admin", "****");
12     }
13
14 }

    执行结果:

七月 19, 2016 1:28:17 上午 org.springframework.context.support.ClassPathXmlApplicationContext prepareRefresh
信息: Refreshing org[email protected]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:

 1 package org.lizf.demo;
 2
 3 import org.springframework.stereotype.Repository;
 4
 5 @Repository
 6 public class UserDao {
 7
 8     public void login(String username, String password) {
 9         System.out.println("login : " + username);
10     }
11
12 }

    UserService.java:

 1 package org.lizf.demo;
 2
 3 import org.springframework.beans.factory.annotation.Autowired;
 4 import org.springframework.stereotype.Repository;
 5
 6 @Repository
 7 public class UserService {
 8
 9     @Autowired
10     private UserDao userDao;
11
12     public void login(String username, String password) {
13         userDao.login(username, password);
14     }
15
16 }

    spring-context.xml配置扫描包:

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <beans xmlns="http://www.springframework.org/schema/beans"
 3     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 4     xmlns:context="http://www.springframework.org/schema/context"
 5     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
 6         http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd">
 7
 8     <context:component-scan base-package="org.lizf.demo" />
 9
10
11 </beans>

    Main.java测试类:

 1 package org.lizf.demo;
 2
 3 import org.springframework.context.ApplicationContext;
 4 import org.springframework.context.support.ClassPathXmlApplicationContext;
 5
 6 public class Main {
 7
 8     public static void main(String[] args) {
 9         ApplicationContext context = new ClassPathXmlApplicationContext("spring-context.xml");
10         UserService userService = (UserService) context.getBean("userService");
11         userService.login("admin", "****");
12     }
13
14 }

    输出结果:

七月 19, 2016 1:40:40 上午 org.springframework.context.support.ClassPathXmlApplicationContext prepareRefresh
信息: Refreshing org[email protected]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:

1 package org.lizf.demo;
2
3 public class UserDao {
4
5     public void login(String username, String password) {
6         System.out.println("login : " + username);
7     }
8
9 }

    UserService.java:

 1 package org.lizf.demo;
 2
 3 public class UserService {
 4
 5     private UserDao userDao;
 6
 7     public void login(String username, String password) {
 8         userDao.login(username, password);
 9     }
10
11     public void setUserDao(UserDao userDao) {
12         this.userDao = userDao;
13     }
14
15 }

    SpringConfig.java 配置类:

 1 package org.lizf.demo;
 2
 3 import org.springframework.context.annotation.Bean;
 4 import org.springframework.context.annotation.Configuration;
 5
 6 //标注这是一个配置类
 7 @Configuration
 8 public class SpringConfig {
 9
10     //标注这是一个Bean
11     @Bean
12     public UserDao userDao() {
13         return new UserDao();
14     }
15
16     @Bean
17     public UserService userService() {
18         UserService userService = new UserService();
19         UserDao userDao = userDao();
20         userService.setUserDao(userDao);
21         return userService;
22     }
23
24 }

    Main.java测试类:

 1 package org.lizf.demo;
 2
 3 import org.springframework.context.ApplicationContext;
 4 import org.springframework.context.annotation.AnnotationConfigApplicationContext;
 5
 6 public class Main {
 7     public static void main(String[] args) {
 8         //这里使用AnnotationConfigApplicationContext来创建ApplicationContext
 9         ApplicationContext context = new AnnotationConfigApplicationContext(SpringConfig.class);
10         UserService userService = (UserService) context.getBean("userService");
11         userService.login("admin", "****");
12     }
13 }

    输出结果:

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

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

 1 package org.lizf.demo;
 2
 3 import org.springframework.context.annotation.AnnotationConfigApplicationContext;
 4
 5 public class Main {
 6     public static void main(String[] args) {
 7         //如果有多个Config类,可以用下边的方式初始化
 8         AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext();
 9         //regiester方法接受可变参数,传入多个Config类
10         ctx.register(SpringConfig.class, SpringConfig2.class, SpringConfig3.class);
11         //刷新ApplicationContext使配置生效
12         ctx.refresh();
13     }
14 }
时间: 2024-12-05 09:08:48

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

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

Spring事务Transaction配置的五种注入方式详解 前段时间对Spring的事务配置做了比较深入的研究,在此之间对Spring的事务配置虽说也配置过,但是一直没有一个清楚的认识.通过这次的学习发觉Spring的事务配置只要把思路理清,还是比较好掌握的. ??? 总结如下: ??? Spring配置文件中关于事务配置总是由三个组成部分,分别是DataSource.TransactionManager和代理机制这三部分,无论哪种配置方式,一般变化的只是代理机制这部分. ???DataSou

spring boot读取配置的三种方式

首先我们在application.yml就简单定义一个端口号的配置吧. 1:Environment:通过Environment的getProperty方法来获取想要的配置信息  如下图: 2:@Value 可以注入具体的配置信息 如下图: 3:自定义配置类:prefix定义配置的前缀 如下图: 然后注入到 其他的类中 以上的三种方式获配置文件的信息 原文地址:https://www.cnblogs.com/thisisme/p/12116965.html

Ioc容器Autofac 三种注册方式

简单来说,所谓注册组件,就是注册类并映射为接口,然后根据接口获取对应类,Autofac将被注册的类称为组件. 虽然可像上篇提到的一次性注册程序集中所有类,但AutoFac使用最多的还是单个注册.这种注册共有三种方式,其中最简单的就是用As方法,例如,ArrayList继承了IEnumerable接口,若将其注册到Autofac中,写法如下所示: ContainerBuilder builder = new ContainerBuilder(); builder.RegisterType<Arra

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

实现购买股票案例: 一.引入JAR文件: 二.开始搭建分层架构---创建账户(Account)和股票(Stock)实体类 Account: /* * 账户 */ public class Account { private int aid;//账户编号 private String aname;//账户名称 private double balance;//账户金额 public int getAid() { return aid; } public void setAid(int aid) {

Spring中装配bean的三种主要方式

1.自动化配置 package com.springinaction.test; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; @Configuration//告诉spring这是一个配置类 @ComponentScan//扫描组件 public class CDPlayerConfig { } pa

Spring IOC 中三种注入方式

项目错误知识点记录 正文 最近在项目的时候,用到Spring框架,Spring框架提供了一种IOC的自动注入功能,可以很轻松的帮助我们创建一个Bean,这样就省的我们四处写new Object()这样的代码了.IOC提供了三种注入方式,接口注入,set方法注入以及构造器注入,三种注入方式使用起来都很easy,具体的使用方法网上都有很多,大家可以自行搜索百度... 那天当我使用接口注入的时候,发现IDEA给我一个警告(以前也有这样的警告,只不过我没太注意),看了看是让我采用构造器注入方式.这就让我

Spring IOC的三种注入方式

Spring IOC三种注入方式: 1.    接口注入 2.    getter,setter方式注入 3.    构造器注入 对象与对象之间的关系可以简单的理解为对象之间的依赖关系:A类需要B类的一个实例来进行某些操作,比如在A类的方法中需要调用B类的方法来完成功能,叫做A类依赖于B类.控制反转是一种将组件依赖关系的创建和管理置于程序外部的技术,由容器控制程序之间的关系,而不是由代码直接控制. 1.接口注入 public class ClassA {  private InterfaceB

spring ioc三种注入方式

spring ioc三种注入方式 IOC ,全称 (Inverse Of Control) ,中文意思为:控制反转 什么是控制反转? 控制反转是一种将组件依赖关系的创建和管理置于程序外部的技术. 由容器控制程序之间的关系,而不是由代码直接控制 由于控制权由代码转向了容器,所以称为反转 接口注入 Setter 注入 构造器注入 三种依赖注入方式的比较 : 接口注入: 接口注入模式因为历史较为悠久,在很多容器中都已经得到应用.但由于其在灵活性.易用性上不如其他两种注入模式,因而在 IOC 的专题世界

Spring整合HIbernate时,三种数据库连接池的配置和比较

现在常用的开源数据库连接池主要有c3p0.dbcp.proxool三种,其中: Spring                         推荐使用dbcp: Hibernate                  推荐使用c3p0和proxool: 1.  DBCP:Apache DBCP(DataBase connection pool)数据库连接池.是Apache上的一个 java连接池项目,也是 tomcat使用的连接池组件.单独使用dbcp需要3个包:common-dbcp.jar,c