zoukankan      html  css  js  c++  java
  • Spring_通过注解实现IOC和DI

     要先配置一个注解模板spring-context-2.5.xsd

    复制最后一个:

    http://www.springframework.org/schema/context/spring-context-2.5.xsd

    Eclipse里window - preferences - XML catalog - add 输入spring-context-2.5.xsd路径 - key type改第二个 - key里粘贴http://www.springframework.org/schema/context/spring-context-2.5.xsd

    在上面手册里复制:xmlns:context="http://www.springframework.org/schema/context" 到xml文件抬头中去,再把手册中的:

    http://www.springframework.org/schema/context 
    http://www.springframework.org/schema/context/spring-context-2.5.xsd

    复制进去,就有提示了。(这些在手册里都是黑体加粗

    配置完context是这样的:

    通过注解实现IOC

    鸡的类:

    package cn.java.annotationioc;
    
    import org.springframework.stereotype.Component;
    
    @Component("smallJi") //就等于在xml中写了一个<bean id="smallJi" class="路径">
    public class JI {
        public void behavior() {
            System.out.println("打鸣");
        }
    }

    鸡的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:context="http://www.springframework.org/schema/context"
           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/context 
            http://www.springframework.org/schema/context/spring-context-2.5.xsd">
    
        <!-- 配置注解驱动与包扫描 -->
        <!-- 
        context:component-scan:组件扫描 (前置通知后置通知每一部分都是一个组件)
        base-package:会扫描包下所有java类中带有@Component的都会交给spring管理
        -->
        <context:component-scan base-package="cn.java.annotationioc"></context:component-scan>
    
    </beans>

    主方法:

    package cn.java.annotationioc;
    
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    
    public class Window {
    
        public static void main(String[] args) {
            ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
            JI ji = (JI) context.getBean("smallJi");
            ji.behavior();
        }
    
    }

    设置单例多例:

    package cn.java.annotationioc;
    
    import org.springframework.context.annotation.Scope;
    import org.springframework.stereotype.Component;
    
    @Component("smallJi") //就等于在xml中写了一个<bean id="smallJi" class="路径">
    @Scope("singleton") //设置了单例,value设置了prototype就是多例
    public class JI {
        public void behavior() {
            System.out.println("打鸣");
        }
    }

    通过注解实现DI

    通过主方法调用Ji类为Duck类中方法赋值:

    Duck.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:context="http://www.springframework.org/schema/context"
           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/context 
            http://www.springframework.org/schema/context/spring-context-2.5.xsd">
    
        <!-- 配置注解驱动与包扫描 -->
        <!-- 
        context:component-scan:组件扫描 (前置通知后置通知每一部分都是一个组件)
        base-package:会扫描包下所有java类中带有@Component的都会交给spring管理
        -->
        <context:component-scan base-package="cn.java.annotationioc"></context:component-scan>
    
    </beans>

    Duck.java

    package cn.java.annotationioc;
    
    import org.springframework.context.annotation.Scope;
    import org.springframework.stereotype.Component;
    
    @Component("ya")//在bean中创建ya
    public class Duck {
        private String duckName;
        private Integer duckAge;
        public String getDuckName() {
            return duckName;
        }
        public void setDuckName(String duckName) {
            this.duckName = duckName;
        }
        public Integer getDuckAge() {
            return duckAge;
        }
        public void setDuckAge(Integer duckAge) {
            this.duckAge = duckAge;
        }
        @Override
        public String toString() {
            return "Duck [duckName=" + duckName + ", duckAge=" + duckAge + "]";
        }
        
                
    }

    Ji.java

    package cn.java.annotationioc;
    
    import javax.annotation.Resource;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Component;
    
    @Component("smallJi") //在bean中创建smallJi
    public class Ji {
        //@Resource(name="ya") //与Duck类保持一致
        @Autowired //自动捆绑到Duck类
        private Duck duck;
    
        public void behavior() {
            duck.setDuckName("唐老鸭");
            duck.setDuckAge(20);
            System.out.println(duck);
        }
    
        
    }

    主方法:

    package cn.java.annotationioc;
    
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    
    public class Window {
    
        public static void main(String[] args) {
            ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
            Ji ji = (Ji) context.getBean("smallJi");
            ji.behavior();
        }
    
    }
  • 相关阅读:
    正则表达式大全
    函数基础(二)
    函数基础(一)
    bzoj3531 [Sdoi2014]旅行
    bzoj4785 [Zjoi2017]树状数组
    bzoj4568 [Scoi2016]幸运数字
    bzoj1975 [Sdoi2010]魔法猪学院
    bzoj1079 [SCOI2008]着色方案
    bzoj1996 [Hnoi2010]chorus 合唱队
    bzoj2326 [HNOI2011]数学作业
  • 原文地址:https://www.cnblogs.com/lonske/p/9073553.html
Copyright © 2011-2022 走看看