zoukankan      html  css  js  c++  java
  • Spring注解开发

    IOC注解方式快速入门

    1. 在spring4之后,想要使用注解形式,必须得要引入aop的包

    2. 在配置文件当中,还得要引入一个context约束

    <?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:context="http://www.springframework.org/schema/context"
    	   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">
    
    </beans>
    

    3. 配置组件扫描

    哪个包下的类型使用组合扫描

    <?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:context="http://www.springframework.org/schema/context"
           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">
        <!--指定注解扫描包-->
        <context:component-scan base-package="com.xzh.spring.demo1"/>
    </beans>
    

    4. 在类开上添加注解

    必须在已经扫描包下

    package com.xzh.spring.demo1;
    
    import org.springframework.stereotype.Controller;
    
    @Controller("user")
    // 相当于配置文件中 <bean id="user" class="当前注解的类"/>
    public class User {
        public String name;
    }
    

    测试:

    @Test
    public void test() {
    
    	ApplicationContext applicationContext =
    			new ClassPathXmlApplicationContext("applicationContext.xml");
    
    	User user = (User) applicationContext.getBean("user");
    
    	System.out.println(user);
    }
    

    5. 使用注解注入属性

    (1)可以不用提供set方法,直接在直接名上添加@value("值")

    package com.xzh.spring.demo1;
    
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.stereotype.Controller;
    
    @Controller("user")
    // 相当于配置文件中 <bean id="user" class="当前注解的类"/>
    public class User {
        @Value("IT666")
        // 相当于配置文件中 <property name="name" value="IT666"/>
        public String name;
    }
    

    测试:

    @Test
    public void test() {
    
    	ApplicationContext applicationContext =
    			new ClassPathXmlApplicationContext("applicationContext.xml");
    
    	User user = (User) applicationContext.getBean("user");
    
    	System.out.println(user);
    	System.out.println(user.name);
    }
    

    (2)如果提供了set方法,在set方法上添加@value("值");

    package com.xzh.spring.demo1;
    
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.stereotype.Controller;
    
    @Controller("user")
    public class User {
        public String name;
    
        @Value("IT888")
        public void setName(String name) {
            this.name = name;
        }
    }
    

    测试同(1)

    IOC注解详解

    @Component

    修改一个类,将这个类交给Spring管理。相当于在配置文件当中配置

    <bean id=""  class="">
    

    @Component三个衍生注解

    为了更好的进行分层,Spring可以使用其它三个注解,功能类似,目前使用哪一个功能都一样, 后期可能会添加一些属于各自的属性。

    @Controller:web层
    @Service:service层
    @Repository:dao层

    @Controller("user")
    public class User {
        @Value("IT666")
        public String name;
    }
    
    @Service("user")
    public class User {
        @Value("IT666")
        public String name;
    }
    
    @Repository("user")
    public class User {
        @Value("IT666")
        public String name;
    }
    

    属性注入

    @Value

    设置普通属性值

    @Controller("user")
    public class User {
        @Value("IT666")
        public String name;
    }
    

    @Autowired

    (1)设置对象类型的属性值,直接使用这种方式,是按照类型完全属性注入,不需要在注解上使用id名称

    @Component("dog")
    public class Dog {
        @Value("旺财")
        public String name;
    }
    
    @Controller("user")
    public class User {
        @Value("IT666")
        public String name;
        @Autowired
        public Dog dog;
    }
    

    测试:

    @Test
        public void test() {
    
            ApplicationContext applicationContext =
                    new ClassPathXmlApplicationContext("applicationContext.xml");
    
            User user = (User) applicationContext.getBean("user");
    
            System.out.println(user);
            System.out.println(user.name);
            System.out.println(user.dog.name);
        }
    

    (2)习惯是按照名称完成属性注入,必须让@Autowired注解与@Qualifier一起使用

    @Component("dog")
    public class Dog {
        @Value("旺财")
        public String name;
    }
    
    @Controller("user")
    public class User {
        @Value("IT666")
        public String name;
        @Autowired
        @Qualifier("dog")
        public Dog dog;
    }
    

    测试代码同上。

    (3)单独使用@Resource,可以按照名称完成属性注入

    @Component("dog")
    public class Dog {
        @Value("旺财")
        public String name;
    }
    
    @Controller("user")
    public class User {
        @Value("IT666")
        public String name;
        @Resource(name = "dog")
        public Dog dog;
    }
    

    测试代码同上。

    @PostConstruct 和 @PreDestroy

    @PostConstruct 初始化方法,相当于

    <bean init-method=""></bean>
    

    @PreDestroy 销毁方法,相当于

    <bean destroy-method=""></bean>
    
    @Controller("user")
    public class User {
        @Value("IT666")
        public String name;
        @Resource(name = "dog")
        public Dog dog;
    
        @PostConstruct
        public void init(){
            System.out.println("init----初始化");
        }
    
        @PreDestroy
        public void destroy(){
            System.out.println("destroy----销毁");
        }
    }
    

    测试:

    @Test
    public void test() {
    
    	ApplicationContext applicationContext =
    			new ClassPathXmlApplicationContext("applicationContext.xml");
    
    	User user = (User) applicationContext.getBean("user");
    
    	System.out.println(user);
    	System.out.println(user.name);
    	System.out.println(user.dog.name);
    
    	((ClassPathXmlApplicationContext) applicationContext).close();
    }
    

    @scope

    作用范围

    • singleton:默认的,Spring会采用单例模式创建这个对象。关闭工厂 ,所有的对象都会销毁。
    • prototype:多例模式。关闭工厂 ,所有的对象不会销毁。内部的垃圾回收机制会回收。
    @Controller("user")
    @Scope("prototype")
    public class User {
        @Value("IT666")
        public String name;
        @Resource(name = "dog")
        public Dog dog;
    
        @PostConstruct
        public void init(){
            System.out.println("init----初始化");
        }
    
        @PreDestroy
    	// 作用范围定为多例,此方法不会调用
        public void destroy(){
            System.out.println("destroy----销毁");
        }
    }
    

    XML与注解比较

    • XML可以适用任何场景 ,结构清晰,维护方便
    • 注解不是自己提供的类使用不了,开发简单方便

    XML与注解整合开发

    • XML管理Bean
    • 注解完成属性注入
    • 使用过程中, 可以不用扫描,扫描是为了类上的注解

    在没有扫描的情况下, 使用属性注解@Resource @Value @Autowired @Qulifier

    <context:annotation-config/>
    
    public class Dog {
        @Value("旺财")
        public String name;
    }
    
    
    public class User {
        @Value("IT666")
        public String name;
        @Resource(name = "dog")
        public Dog dog;
    
        @PostConstruct
        public void init(){
            System.out.println("init----初始化");
        }
    
        @PreDestroy
        public void destroy(){
            System.out.println("destroy----销毁");
        }
    }
    

    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:context="http://www.springframework.org/schema/context"
           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">
        <context:annotation-config/>
        <bean id="user" class="com.xzh.spring.demo1.User"/>
        <bean id="dog" class="com.xzh.spring.demo1.Dog"/>
    </beans>
    

    测试:

    @Test
    public void test() {
    
    	ApplicationContext applicationContext =
    			new ClassPathXmlApplicationContext("applicationContext.xml");
    
    	User user = (User) applicationContext.getBean("user");
    
    	System.out.println(user);
    	System.out.println(user.name);
    	System.out.println(user.dog.name);
    
    	((ClassPathXmlApplicationContext) applicationContext).close();
    }
    
  • 相关阅读:
    UVA 10600 ACM Contest and Blackout(次小生成树)
    UVA 10369
    UVA Live 6437 Power Plant 最小生成树
    UVA 1151 Buy or Build MST(最小生成树)
    UVA 1395 Slim Span 最小生成树
    POJ 1679 The Unique MST 次小生成树
    POJ 1789 Truck History 最小生成树
    POJ 1258 Agri-Net 最小生成树
    ubuntu 用法
    ubuntu 搭建ftp服务器,可以通过浏览器访问,filezilla上传文件等功能
  • 原文地址:https://www.cnblogs.com/xzh0717/p/10843370.html
Copyright © 2011-2022 走看看