• spring-ioc


    1. 什么是spring,它能够做什么?

    Spring是一个开源框架,它由Rod Johnson创建。它是为了解决企业应用开发的复杂性而创建的。

    Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。

    然而,Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。

    目的:解决企业应用开发的复杂性

    功能:使用基本的JavaBean代替EJB,并提供了更多的企业应用功能

    范围:任何Java应用

    简单来说,Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。

    2. 什么是控制反转(或依赖注入)

    控制反转(IoC=Inversion of Control)IoC,用白话来讲,就是由容器控制程序之间的(依赖)关系,而非传统实现中,由程序代码直接操控。这也就是所谓“控制反转”的概念所在:(依赖)控制权由应用代码中转到了外部容器,控制权的转移,是所谓反转。

    IoC还有一个另外的名字:“依赖注入 (DI=Dependency Injection)” ,即由容器动态的将某种依赖关系注入到组件之中

    案例:实现Spring的IoC

    IOC/DI

    将以前由程序员实例化对象/赋值的工作交给了spring处理

    3. 如何在spring当中定义和配置一个JavaBean(使用无参构造方法+set方法创建一个JavaBean)

    3.1 id:在容器中查找Bean的id(唯一、且不能以/开头)

    3.2 class:bean的完整类名

    3.3 name:在容器中查找Bean的名字(唯一、允许以/开头、允许多个值,多个值之间用逗号或空格隔开)

    3.4 scope:(singleton|prototype)默认是singleton

      3.4.1 singleton(单例模式):在每个Spring IoC容器中一个bean定义对应一个对象实例

      3.4.2 prototype(原型模式/多例模式):一个bean定义对应多个对象实例

    3.4 abstract:将一个bean定义成抽象bean(抽象bean是不能实例化的),抽象类一定要定义成抽象bean,非抽象类也可以定义成抽象bean

    3.5 parent:指定一个父bean(必须要有继承关系才行)

    3.6 init-method:指定bean的初始化方法

    3.7 constructor-arg:使用有参数构造方法创建javaBean

    代码演示:

    创建一个接口:

    UserBiz 
    package com.hxc.ioc.biz;
    /**
     * 通过企业的案例来讲解使用spring ioc的必要性
     *     v1.0:实现游戏的上传功能
     *     v2.0:优化对游戏的上传功能进行优化
     * @author 旧城
     *
     */
    public interface UserBiz {
        public void upload();
    }

     实现类:

    UserBizImpl1 
    package com.hxc.ioc.impl;
    
    import com.hxc.ioc.biz.UserBiz;
    
    public class UserBizImpl1 implements UserBiz{
    
        @Override
        public void upload() {
            System.out.println("实现用户上传的功能");
            
        }
    
    }
    UserBizImpl2 
    package com.hxc.ioc.impl;
    
    import com.hxc.ioc.biz.UserBiz;
    
    public class UserBizImpl2 implements UserBiz {
    
        @Override
        public void upload() {
            System.out.println("开始优化性能的代码");
            System.out.println("实现用户上传的功能");
        }
    
    }
    UserAction 
    package com.hxc.ioc.web;
    
    import java.util.List;
    
    import com.hxc.ioc.biz.UserBiz;
    
    /**
     * IOC的注入方式及各类型
     *     set注入
     *         基本类型与String
     *         数组
     *         自定义类型
     * 
     *     构造注入
     *     自动装配
     *         spring4之后出现的
     *         byType:根据Bean中的接口,在spring上下文中寻找对应的实现类
     *         byName:根据配置的bean中的接口名字,在spring上下文中寻找对应的实现类
     * 
     * @author 旧城
     *
     */
    public class UserAction {
    
        private UserBiz userBiz;
        private String uname;
        private int age;
        private List<String> hobby;
        
        
    
        public UserAction() {
            super();
            // TODO Auto-generated constructor stub
        }
    
        public UserAction(String uname, int age) {
            super();
            this.uname = uname;
            this.age = age;
        }
    
        public List<String> getHobby() {
            return hobby;
        }
    
        public void setHobby(List<String> hobby) {
            this.hobby = hobby;
        }
    
        public UserBiz getUserBiz() {
            return userBiz;
        }
    
        public void setUserBiz(UserBiz userBiz) {
            this.userBiz = userBiz;
        }
    
        public void upload() {
            userBiz.upload();
        }
        
        public void test1() {
            System.out.println(this.uname);
            System.out.println(this.age);
            System.out.println(this.hobby);
    
        }
    }
    OrderAction 
    package com.hxc.ioc.web;
    
    import com.hxc.ioc.biz.UserBiz;
    
    public class OrderAction {
    
        private UserBiz userBiz;
    
        public UserBiz getUserBiz() {
            return userBiz;
        }
    
        public void setUserBiz(UserBiz userBiz) {
            this.userBiz = userBiz;
        }
    
        public void upload() {
            userBiz.upload();
        }
    }

     测试类:

    IocTest 
    package com.hxc.ioc.test;
    
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    
    import com.hxc.ioc.web.OrderAction;
    import com.hxc.ioc.web.UserAction;
    
    public class IocTest {
    
        public static void main(String[] args) {
    //        UserAction userAction=new UserAction();
    //        userAction.upload(); 
            
            ApplicationContext springContext=new ClassPathXmlApplicationContext("/spring-context.xml");
            UserAction userAction =(UserAction) springContext.getBean("user");
            OrderAction orderAction =(OrderAction) springContext.getBean("ttt");
            userAction.upload();
            orderAction.upload();
            userAction.test1();
            
        }
    }
    UserServlet 
    package com.hxc.ioc.web;
    
    import java.io.IOException;
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import org.springframework.context.ApplicationContext;
    
    /**
     * Servlet implementation class UserServlet
     */
    @WebServlet("/user")
    public class UserServlet extends HttpServlet {
        
    
        /**
         * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
         */
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            doPost(request, response);
        }
    
        /**
         * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
         */
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            System.out.println("处理用户请求");
            ApplicationContext springContext=(ApplicationContext) request.getServletContext().getAttribute("spring_key");
            UserAction userAction=(UserAction) springContext.getBean("user");
            userAction.upload();
        }
    }

     在src/main/resources路径下配置对应的xml文件:

    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"
           default-autowire="byType"
           xmlns:context="http://www.springframework.org/schema/context"
           xmlns:mvc="http://www.springframework.org/schema/mvc"
           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.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd">
           
           <bean class="com.hxc.ioc.impl.UserBizImpl2" id="userBiz"></bean>
          
           <bean class="com.hxc.ioc.web.UserAction" id="user">
                   
                   <!-- set注入用property标签 -->
                   <!-- <property name="uname" value="zs"></property> -->
                    <!-- <property name="age" value="22"></property> -->
                    
                    <!-- 构造注入用constructor-arg标签 -->
                    <constructor-arg name="uname" value="ls"></constructor-arg>
                   <constructor-arg name="age" value="22"></constructor-arg>
               
                <property name="hobby" >
                    <list>
                        <value></value>
                        <value></value>
                        <value>rap</value>
                        <value>篮球</value>
                    </list>
                </property>
           </bean>
           
           
           <bean class="com.hxc.ioc.web.OrderAction" id="ttt">
                
           </bean>
    </beans>

    spring-other.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"
           default-autowire="byType"
           xmlns:context="http://www.springframework.org/schema/context"
           xmlns:mvc="http://www.springframework.org/schema/mvc"
           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.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd">
           
           <bean class="com.hxc.ioc.impl.UserBizImpl2" id="userBiz"></bean>
          
           <bean class="com.hxc.ioc.web.UserAction" id="user">
                   
                   <!-- set注入用property标签 -->
                   <!-- <property name="uname" value="zs"></property> -->
                    <!-- <property name="age" value="22"></property> -->
                    
                    <!-- 构造注入用constructor-arg标签 -->
                    <constructor-arg name="uname" value="ls"></constructor-arg>
                   <constructor-arg name="age" value="22"></constructor-arg>
               
                <property name="hobby" >
                    <list>
                        <value></value>
                        <value></value>
                        <value>rap</value>
                        <value>篮球</value>
                    </list>
                </property>
           </bean>
           
           
           <bean class="com.hxc.ioc.web.OrderAction" id="ttt">
                
           </bean>
    </beans>
  • 相关阅读:
    新概念4-27
    胡雪岩06
    新概念4-26
    新概念4-25
    作业01
    day 01 小结
    计算机编程基础
    计算机组成
    markdown文档的编写
    zoj 2674 Strange Limit 欧拉定理应用 (3-E)
  • 原文地址:https://www.cnblogs.com/huxiaocong/p/11337353.html
Copyright © 2020-2023  润新知