• 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();
        }
    
    }
  • 相关阅读:
    JVM垃圾回收之三色标记
    负载均衡之LVS与Nginx对比
    浅析虚拟机内存管理模型
    JVM调优之垃圾定位、垃圾回收算法、垃圾处理器对比
    JAVA对象分析之偏向锁、轻量级锁、重量级锁升级过程
    全局负载均衡与CDN内容分发
    内存屏障在CPU、JVM、JDK中的实现
    JVM类加载与双亲委派机制被打破
    JVM虚拟机Class类文件研究分析
    Redis分布式锁升级版RedLock及SpringBoot实现
  • 原文地址:https://www.cnblogs.com/lonske/p/9073553.html
Copyright © 2020-2023  润新知