• Spring框架学习之第2节


    传统的方法和使用spring的方法

    使用spring,没有new对象,我们把创建对象的任务交给了spring的框架,通过配置用时get一下就行。

    项目结构

    applicationContext.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:aop="http://www.springframework.org/schema/aop"
    		xmlns:tx="http://www.springframework.org/schema/tx"
    		xsi:schemaLocation="
    			http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
    			http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
    			http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">
    
    <!-- 在容器文件中配置bean(service/dao/domain/action/数据源) -->
    <!-- bean元素的作用是,当我们的spring框架加载的时候,spring就会去看这里面有没有bean,如果有这个bean spring就会自动创建这个bean对象,并且将其装在到内存里面去  -->
    <!-- 
    类似于:Userservice userService = new UserService();
    id号是和对象的变量名对应的,如果id号为litao,则这句话的含义为
    UserService litao = new UserService();
    property为属性值,name为注入这个属性,等价于
    userService.setName("小明");set方法必须写否则注入不进去
    
     -->
    <bean id="userService" class="com.service.UserService">
    <!-- 这里体现了容器的特点,配置bean并注入属性,体现出注入的概念 -->
    	<property name="name">
    		<value>小明</value>
    	</property>
    	<!-- 依赖注入 -->
    	<!-- 在userService对象中引用 bybService这个bean,不是用value而是ref引用-->
    	<property name="byeService" ref="bybService"/>
    </bean>
    <!-- 两种设置value的方式都行 -->
    <bean id="bybService" class="com.service.BybService">
    	<property name="name" value="小红" />
    </bean>
    
    </beans>
    			
    

    UserService.java

    package com.service;
    
    public class UserService {
    	
    	public String name;
    	
    	private BybService byeService;
    
    
    
    	public String getName() {
    		return name;
    	}
    
    	public void setName(String name) {
    		this.name = name;
    	}
    	
    	public BybService getByeService() {
    		return byeService;
    	}
    
    	public void setByeService(BybService byeService) {
    		this.byeService = byeService;
    	}
    	
    	public void sayHello(){
    		System.out.println("hello " + name);
    		byeService.sayBye();
    	}
    
    }
    

    BybService.java

    package com.service;
    
    public class BybService {
    	
    	private String name;
    
    	public String getName() {
    		return name;
    	}
    
    	public void setName(String name) {
    		this.name = name;
    	}
    	
    	public void sayBye(){
    		
    		System.out.println("bye " + name);		
    	}
    
    }
    

    Test.java

    package com.test;
    
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    
    import com.service.BybService;
    import com.service.UserService;
    
    public class Test {
    	
    	public static void main(String[] args){
    		//我们先使用传统方法,来调用UserService的sayHello方法
    //		UserService userService = new UserService();
    //		userService.setName("小明");
    //		userService.sayHello();
    		
    		//我现在来使用spring来完成上面的任务
    		//1.得到spring的applicationContext对象(容器对象)
    		//通过类路径加载文件,这个对象就对象applicationContext.xml文件
    		//这句话会导致spring文件被加载
    		ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
    		UserService us = (UserService)ac.getBean("userService");
    		us.sayHello();
    		
    		
    		//从ac(代表applicationContext这个容器)中取出
    		//BybService bybService = (BybService) ac.getBean("bybService");
    		//bybService.sayBye();
    		
    	}
    }
    

    spring的运行原理图

    我们再看spring

    对以前案例小结

    spring实际上是一种容器框架,可以配置各种bean(action/service/domain/dao,spring各个层都可以接管),并且可以维护bean与bean之间的关系,当我们需要使用某个bean的时候,我们可以getBean(id),使用即可。

    ioc是什么?

    答:ioc(inverse of crontrol)控制反转:所谓控制反转就是把创建对象(bean),和维护对象(bean)的关系的权利转移到spring的容器文件(applicationContext.xml),通过配置文件就可以把创建对象和维护对象关系搞定,而程序的本身不再维护了,程序要什么就取什么。

    学习框架,最重要的就是学习各个配置,配置搞清楚了,配置就明白了。

    DI是什么?

    答:(dependency injection)依赖注入:实际上DI和IOC是同一个概念,spring的设计者认为DI更准确地表示spring的核心技术。

    大的项目(税务,证券,石油,财务,政务系统,oa,erp)有很多模块是通用的,

    比方说:分页,数据源可以将其做成一个bean,再比如安全机制,写日志,都将其做成一个bean,用的

    时候将这个bean注入进去就行了,这样开发就像搭积木了,用的时候引用一下就行了。

    使用了spring变成的力度变大了,开发效率肯定会提高。

    (汇编 指令编程,c 语句编程,Java对象编程,spring 组件编程)

    把ApplicationContext做成一个单例的了

    修改后的项目

    项目结构

    applicationContext.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:aop="http://www.springframework.org/schema/aop"
    		xmlns:tx="http://www.springframework.org/schema/tx"
    		xsi:schemaLocation="
    			http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
    			http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
    			http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">
    
    <!-- 在容器文件中配置bean(service/dao/domain/action/数据源) -->
    <!-- bean元素的作用是,当我们的spring框架加载的时候,spring就会去看这里面有没有bean,如果有这个bean spring就会自动创建这个bean对象,并且将其装在到内存里面去  -->
    <!-- 
    类似于:Userservice userService = new UserService();
    id号是和对象的变量名对应的,如果id号为litao,则这句话的含义为
    UserService litao = new UserService();
    property为属性值,name为注入这个属性,等价于
    userService.setName("小明");set方法必须写否则注入不进去
    
     -->
    <bean id="userService" class="com.service.UserService">
    <!-- 这里体现了容器的特点,配置bean并注入属性,体现出注入的概念 -->
    	<property name="name">
    		<value>小明</value>
    	</property>
    	<!-- 依赖注入 -->
    	<!-- 在userService对象中引用 bybService这个bean,不是用value而是ref引用-->
    	<property name="byeService" ref="bybService"/>
    </bean>
    <!-- 两种设置value的方式都行 -->
    <bean id="bybService" class="com.service.BybService">
    	<property name="name" value="小红" />
    </bean>
    
    </beans>
    

    UserService.java

    package com.service;
    
    public class UserService {
    	
    	public String name;
    	
    	private BybService byeService;
    
    
    
    	public String getName() {
    		return name;
    	}
    
    	public void setName(String name) {
    		this.name = name;
    	}
    	
    	public BybService getByeService() {
    		return byeService;
    	}
    
    	public void setByeService(BybService byeService) {
    		this.byeService = byeService;
    	}
    	
    	public void sayHello(){
    		System.out.println("hello " + name);
    		byeService.sayBye();
    	}
    
    }
    

    BybService.java

    package com.service;
    
    public class BybService {
    	
    	private String name;
    
    	public String getName() {
    		return name;
    	}
    
    	public void setName(String name) {
    		this.name = name;
    	}
    	
    	public void sayBye(){
    		
    		System.out.println("bye " + name);		
    	}
    
    }
    

    Test.java

    package com.test;
    
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    
    import com.service.BybService;
    import com.service.UserService;
    import com.util.ApplicationContextUtil;
    
    import org.springframework.context.ApplicationContext;
    
    public class Test {
    	
    	public static void main(String[] args){		
    		
    		((UserService)ApplicationContextUtil.getApplicationContext().getBean("userService")).sayHello();		
    		
    	}
    }
    

    ApplicationContextUtil.java

    package com.util;
    
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    
    //工具类,保证applicationContext只能有一个
    final public class ApplicationContextUtil {
    	
    	private static ApplicationContext ac = null;
    	
    	private ApplicationContextUtil(){
    		
    	}
    	
    	static{
    		ac = new ClassPathXmlApplicationContext("applicationContext.xml");
    		
    	}
    	
    	public static ApplicationContext getApplicationContext()
    	{
    		return ac;
    	}
    
    }
    
  • 相关阅读:
    Finance_Time-Series-Analysis-with-app-in-R
    Linear_algebra_06_二次型
    Linear_algebra_05_相似对角形
    病理学
    S&p_14_参数的假设检验
    S&p_13_参数区间估计
    Finance_Analysis-of-Financial-Time-Series
    817. Linked List Components
    811. Subdomain Visit Count
    807. Max Increase to Keep City Skyline
  • 原文地址:https://www.cnblogs.com/beautiful-code/p/5765757.html
Copyright © 2020-2023  润新知