Spring01-IOC
1,新建一个Java Project 导入如下jar包和apache-commons-logging包
2, 在src目录下创建一个beans.xml的配置文件,先加入schema
spring-beans-3.2.4.RELEASE.jar/org.springframework.beans.factory.xml/spring-beans-version.xsd文件,可以放到本地的dtd目录中,然后引入.
- <?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-3.0.xsd">
- <!-- 相当于 HelloWorld hello =new HelloWorld()-->
- <bean id="hello" class="com.yangw.spring.model.HelloWorld"></bean>
- </beans>
3,创建一个对象HelloWorld
- package com.yangw.spring.model;
- public class HelloWorld {
- public String hello(){
- return "hello world";
- }
- }
4,在beans.xml中创建对象
- <!-- 相当于 HelloWorld hello =new HelloWorld()-->
- <bean id="hello" class="com.yangw.spring.model.HelloWorld"></bean>
5,创建测试类,完成测试
- package com.yangw.spring.test;
- import org.junit.Test;
- import org.springframework.beans.factory.BeanFactory;
- import org.springframework.context.support.ClassPathXmlApplicationContext;
- import com.yangw.spring.model.HelloWorld;
- public class TestSpring {
- @Test
- public void test01(){
- //创建Spring工厂
- BeanFactory factory= new ClassPathXmlApplicationContext("beans.xml");
- //通过工厂获取Spring的对象
- HelloWorld hello = factory.getBean("hello", HelloWorld.class);// 这个字符串参数是bean.xml中的id
- System.out.println(hello.hello());
- }
- }
6, scope属性的用处
- <!-- bean标签中有一个属性 scope用来表示范围的 (singleton单例[默认],prototype多例)-->
- <bean id="hello" class="com.yangw.spring.model.HelloWorld" ></bean>
7,下面是一个User的action-service-dao的完整过程演示
1)beans.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-3.0.xsd">
- <!-- bean标签中有一个属性 scope用来表示范围的 (singleton单例[默认],prototype多例)-->
- <!-- 将所有的类交给Spring管理,并且对需要注入的完成依赖注入 -->
- <bean id="userDao" class="com.yangw.spring.dao.UserDao" />
- <bean id="userService" class="com.yangw.spring.service.UserService">
- <!-- name中的值会在userService对象中调用setXXX()方法完成注入 -->
- <property name="userDao" ref="userDao" />
- </bean>
- <!-- 对于userAction而言,里面的属性值状态会根据不同的线程得到不同的值,因此应该使用多例 -->
- <bean id="userAction" class="com.yangw.spring.action.UserAction" scope="prototype">
- <property name="userService" ref="userService" />
- </bean>
- </beans>
2)User对象
- package com.yangw.spring.model;
- public class User {
- private int id;
- private String username;
- public User(int id, String username) {
- this.id = id;
- this.username = username;
- }
- public User() {
- }
- public int getId() {
- return id;
- }
- public void setId(int id) {
- this.id = id;
- }
- public String getUsername() {
- return username;
- }
- public void setUsername(String username) {
- this.username = username;
- }
- @Override
- public String toString() {
- return "User [id=" + id + ", username=" + username + "]";
- }
- }
3)UserDao ,接口略去不再这里写了
- package com.yangw.spring.dao;
- import com.yangw.spring.model.User;
- public class UserDao implements IUserDao {
- @Override
- public void add(User user) {
- System.out.println("add :"+user);
- }
- @Override
- public void delete(int id) {
- System.out.println("delete :"+id);
- }
- @Override
- public User load(int id) {
- System.out.println("load :"+id);
- return null;
- }
- }
4)UserService
- package com.yangw.spring.service;
- import com.yangw.spring.dao.IUserDao;
- import com.yangw.spring.model.User;
- public class UserService implements IUserService {
- private IUserDao userDao ;
- @Override
- public void add(User user) {
- userDao.add(user);
- }
- @Override
- public void delete(int id) {
- userDao.delete(id);
- }
- @Override
- public User load(int id) {
- return userDao.load(id);
- }
- public IUserDao getUserDao() {
- return userDao;
- }
- public void setUserDao(IUserDao userDao) {
- this.userDao = userDao;
- }
- }
5)UserAction
- package com.yangw.spring.action;
- import com.yangw.spring.model.User;
- import com.yangw.spring.service.IUserService;
- public class UserAction {
- private int id;
- private User user;
- private IUserService userService;
- public void add(){
- userService.add(user);
- }
- public void delete(){
- userService.delete(id);
- }
- public void load(){
- User u=userService.load(id);
- System.out.println(u);
- }
- public int getId() {
- return id;
- }
- public void setId(int id) {
- this.id = id;
- }
- public User getUser() {
- return user;
- }
- public void setUser(User user) {
- this.user = user;
- }
- public IUserService getUserService() {
- return userService;
- }
- public void setUserService(IUserService userService) {
- this.userService = userService;
- }
- }
6)测试
- package com.yangw.spring.test;
- import org.junit.Test;
- import org.springframework.beans.factory.BeanFactory;
- import org.springframework.context.support.ClassPathXmlApplicationContext;
- import com.yangw.spring.action.UserAction;
- import com.yangw.spring.model.HelloWorld;
- import com.yangw.spring.model.User;
- public class TestSpring {
- //1,创建Spring工厂
- BeanFactory factory= new ClassPathXmlApplicationContext("beans.xml");
- @Test
- public void testUser(){
- //2,通过工厂获取Spring的对象
- UserAction userAction = factory.getBean("userAction", UserAction.class);
- User u1=new User(1,"yangw");
- userAction.setUser(u1);
- userAction.add();
- }
- }
8, 一些简单属性的注入使用 value属性而不是ref属性
- <bean id="user" class="com.yangw.spring.model.User">
- <!-- 为user设置一些属性值,会调用对象的setXXX()注入值,使用value属性 -->
- <property name="id" value="1" />
- <property name="username" value="tiantian" />
- <!-- 还可以注入list这种列表 -->
- <property name="names">
- <list>
- <value>11111</value>
- <value>22222</value>
- <value>33333</value>
- </list>
- </property>
- </bean>
- <!-- 对于userAction而言,里面的属性值状态会根据不同的线程得到不同的值,因此应该使用多例 -->
- <bean id="userAction" class="com.yangw.spring.action.UserAction" scope="prototype">
- <property name="userService" ref="userService" />
- <property name="user" ref="user"></property>
- </bean>
9, 基于annotation的注入
- <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-3.0.xsd
- http://www.springframework.org/schema/context
- http://www.springframework.org/schema/context/spring-context-3.0.xsd">
- <!--1, 打开Spring的annotation -->
- <context:annotation-config/>
- <!-- 2, 设定Spring去那些包中找annotation -->
- <context:component-scan base-package="com.yangw.spring" />
- </beans>
- //相当于 <bean id="userDao" class="com.yangw.spring.dao.UserDao"/>
- //Component是通用的,一般dao层我们使用
- //@Component("userDao")
- @Repository("userDao")
- public class UserDao implements IUserDao {
- }
- @Service("userService")
- public class UserService implements IUserService {
- @Resource
- //@Autowired 建议使用Resource,Resource默认通过名称注入
- private IUserDao userDao ;
- //其实也可以在set方法上面进行注入
- }
- @Controller("userAction")
- @Scope("prototype")
- public class UserAction {
- private int id;
- private User user;
- @Resource
- private IUserService userService;
- }
- public class TestSpring2 {
- //1,创建Spring工厂
- BeanFactory factory= new ClassPathXmlApplicationContext("beans2.xml");
- @Test
- public void testUser(){
- //2,通过工厂获取Spring的对象
- UserAction userAction = factory.getBean("userAction", UserAction.class);
- User u1=new User(1,"yangw");
- userAction.setUser(u1);
- userAction.add();
- }
- }
Spring01-IOC的更多相关文章
- Spring-01 注解实现IOC
Spring框架四大原则 使用pojo进行轻量级和最小侵入式开发. 通过依赖注入和基于接口编程实现松耦合. 使用AOP和默认习惯进行声明式编程. 使用AOP和模板(template)减少模式化代码. ...
- Spring01——你应该了解的,有关 IOC 容器的一切
从本文开始,将开始介绍关于 Spring 的一些常见知识点.关注我的公众号「Java面典」,每天 10:24 和你一起了解更多 Java 相关知识点. 在如今的 Java Web 开发中,Spring ...
- Spring----01. 入门知识,IoC/DI
1.spring两个最基本概念:依赖注入DI.面向切面AOP 2.spring通过上下文Application Context装配bean,实现方式的区别是如何加载它们的配置信息, ClassPath ...
- Spring学习总结(一)——Spring实现IoC的多种方式
控制反转IoC(Inversion of Control),是一种设计思想,DI(依赖注入)是实现IoC的一种方法,也有人认为DI只是IoC的另一种说法.没有IoC的程序中我们使用面向对象编程对象的创 ...
- Spring实现Ioc的多种方式--控制反转、依赖注入、xml配置的方式实现IoC、对象作用域
Spring实现Ioc的多种方式 一.IoC基础 1.1.概念: 1.IoC 控制反转(Inversion of Control) IoC是一种设计思想. 2.DI 依赖注入 依赖注入是实现IoC的一 ...
- 学习AOP之透过Spring的Ioc理解Advisor
花了几天时间来学习Spring,突然明白一个问题,就是看书不能让人理解Spring,一方面要结合使用场景,另一方面要阅读源代码,这种方式理解起来事半功倍.那看书有什么用呢?主要还是扩展视野,毕竟书是别 ...
- 【调侃】IOC前世今生
前些天,参与了公司内部小组的一次技术交流,主要是针对<IOC与AOP>,本着学而时习之的态度及积极分享的精神,我就结合一个小故事来初浅地剖析一下我眼中的“IOC前世今生”,以方便初学者能更 ...
- 深入理解DIP、IoC、DI以及IoC容器
摘要 面向对象设计(OOD)有助于我们开发出高性能.易扩展以及易复用的程序.其中,OOD有一个重要的思想那就是依赖倒置原则(DIP),并由此引申出IoC.DI以及Ioc容器等概念.通过本文我们将一起学 ...
- 自己实现简单Spring Ioc
IoC则是一种 软件设计模式,简单来说Spring通过工厂+反射来实现IoC. 原理简单说明: 其实就是通过解析xml文件,通过反射创建出我们所需要的bean,再将这些bean挨个放到集合中,然后对外 ...
- 使用Microsoft的IoC框架:Unity来对.NET应用进行解耦
1.IoC/DI简介 IoC 即 Inversion of Control,DI 即 Dependency Injection,前一个中文含义为控制反转,后一个译为依赖注入,可以理解成一种编程模式,详 ...
随机推荐
- jQuery选择器使用习惯
http://www.cnblogs.com/fredlau/archive/2009/03/19/1416327.html
- How to make sure your machine is always online without sleep
1. Create a "NeverOff" power plan: Control Panle->System and Security->Power Options ...
- SLF4J源码解析-LoggerFactory(二)
承接前文SLF4J源码解析-LoggerFactory(一),本文则主要针对获取ILoggerFactory对象作下简单的分析 LoggerFactory#getILoggerFactory() 源码 ...
- Spring(三)--AOP【面向切面编程】、通知类型及使用、切入点表达式
1.概念:Aspect Oriented Programming 面向切面编程 在方法的前后添加方法 2.作用:本质上来说是一种简化代码的方式 继承机制 封装方法 动 ...
- Spring MVC控制层传递对象后在JSP页面中的取值方法
List<Order> orders = new ArrayList<Order>(); for (int i = 0; i < 3; i++) { Order t = ...
- javascript基础进阶——执行环境及作用域链
概念 执行环境 执行环境定义了变量或函数有权访问的其他函数,决定了他们各自的行为.每个执行环境都有一个与之关联的变量对象. 变量对象 环境中定义的所有变量和函数都保存在这个对象中. 全局执行环境 全局 ...
- JDK+Apache+Tomcat+MySQL配置 一起来学习吧
配置JDK1.8+Apache2.4+Tomcat8.0+mySQL5.1,网上的资料非常繁杂,花费几天时间配置成功,汇总记录. 操作系统:CentOS6.5 预先下载最新版软件: apache-to ...
- 使用CefSharp 在C#用户控件中嵌入Chrome浏览器使用方法
CEF(Chromium Embedded Framework, 嵌入式Chromium框架)是C/C++开发的库 目前 Google Chrome(Google浏览器),Chromium浏览器,Op ...
- Java jdk 快速配置
JAVA_HOME C:\Program Files\Java\jdk1.8.0_92 Path %JAVA_HOME%\bin;%JAVA_HOME%\jre\bin; CLASSPATH ...
- Angular+ionic2 web端 启动程序出现短暂 白屏或黑屏 的处理小妙招
在ionic2项目启动是会出现短暂的白屏或者黑屏,虽然很短,但是用户体验不太好.上网查了相关的资料,都是针对打包APP的解决办法,针对浏览器端使用的项目没有效果,所以自己写了样式,巧妙的避开这个问题, ...