zoukankan      html  css  js  c++  java
  • Spring之注解

    时间:2017-2-1 00:40

    ——使用注解的方式装配Bean(IoC)

    Spring2.5引入了使用注解来定义Bean的方式。

    使用@Component注解来描述Spring框架中的Bean。

    步骤:
        1)在配置文件中引入约束:xmlns:context="http://www.springframework.org/schema/context"
        2)在Bean上添加注解@Component(value="xxx"),value值为bean标签中的id属性。
        3)在配置文件中添加要扫描的包:<context:component-scan base-package="com.wyc.spring3.demo1"></context:component-scan>
        4)如果有多个包,可以使用逗号隔开
        5)可以写父目录,会自动包含子目录,例如:com.wyc

    示例代码:

        /**
         * 使用注解的方式装配Bean
         * @author WYC
         *
         */
        // 在Spring配置文件中:<bean id="userService" class="com.wyc.demo1.UserService" />
        @Component("userService")
        public class UserService {
            public void sayHello(){
                System.out.println("Hello Spring Annotation");
            }
        }
     
    ----------------------------------------------------------------------------------------------------------------------------

    配置文件:

    xsi:schemaLocation="
     
        <context:component-scan base-package="com.wyc.spring3.demo1"></context:component-scan>

    </beans>



    除了使用@Component外,Spring还提供了三个功能基本和@Component等效的注解:
        1)@Repository
            用于对DAO实现类进行标注

        2)@Service
            用于对Service实现类进行标注

        3)@Controller
            用于对Controller实现类进行标注

        这三个注解是为了让标注类本身的用途清晰,进行分层开发,Spring在后续版本会对其进行增强。


    ——Bean的属性注入

    1、普通属性
        直接使用@Value注解进行注入

        @Value(value="哈哈哈")
        private String info;

    2、对象属性
        /*
         * Autowired自动装配,默认使用类型注入,required属性可以设置忽略异常,默认值为true,false为忽略,当程序出现错误,不会终止程序
         * 如果想根据名称注入,就使用Qualifier注解
         */
        @Autowired(required=false)
        @Qualifier("userDao")
        private UserDao userDao;

    3、Spring提供对JSR-250中定义@Resource标准注解的支持
        @Resource注解有一个属性:
            *   name:
                如果不写,则相当于自动装配,功能与Autowired相同。
                如果指定name的属性,例如:@Resource(name="userDao"),则相当于@Qualifier("userDao");

    4、示例代码:

    // 在Spring配置文件中:<bean id="userService" class="com.wyc.demo1.UserService" />
    @Component("userService")
    public class UserService {
        @Value(value = "哈哈哈")
        private String info;
     
        /*
         * Autowired自动装配,默认使用类型注入,required属性可以设置忽略异常,false为忽略,当程序出现错误,不会终止程序
         * 如果想根据名称注入,就使用Qualifier注解
         */
        // @Autowired(required=false)
        // @Qualifier("userDao")
        @Resource(name = "userDao")
        private UserDao userDao;
     
        public void sayHello() {
            System.out.println("Hello Spring Annotation");
        }
     
        @Override
        public String toString() {
            return "UserService [info=" + info + ", userDao=" + userDao + "]";
        }
    }

    ----------------------------------------------------------------------------------------------------------------------------

    @Repository("userDao")
        public class UserDao {
     
    }

    ——使用注解配置Bean的其他属性
     
    1、配置Bean初始化方法和销毁方法
        *   init-method
            @PostConstruct

        *   destroy-method
            @PreDestroy

        示例代码:
            @PostConstruct
            public void init(){
                System.out.println("初始化方法");
            }
     
            @PreDestroy
            public void destory(){
                System.out.println("销毁方法");
            }

    2、配置Bean的作用范围
        使用@Scope注解

        示例代码:
            @Scope(value="singleton")
            @Scope(value="prototype")
            public class UserService {
            }

    ——使用BeanConfig定义

    使用Java类定义Bean
        在Spring3.0中,以JavaConfig为核心,提供使用Java类定义Bean信息的方法:
            *   @Configuration
                指定POJO类为Spring提供Bean定义信息。

            *   @Bean
                提供一个Bean定义信息。

    示例代码:

    BeanConfig

    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
     
    /**
     * 使用该类提供配置信息
     * @author WYC
     *
     */
    @Configuration // Configuration表示这是一个配置类
    public class BeanConfig {
        @Bean(name="car") // 相当于配置<bean name="car" class="..." />,最终会通过该方法的返回值得到一个Car类型实例。
        public Car initCar(){
            Car car = new Car();
            car.setName("奔驰");
            car.setPrice(2000000D);
            return car;
        }
     
        @Bean(name="product")
        public Product initProduct(){
            Product product = new Product();
            product.setName("空调");
            product.setPrice(8000D);
            return product;
        }
    }

    ---------------------------------------------------------------------------------------------------------------------------

    测试代码:

    public void fun1(){
        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        Car car = (Car) context.getBean("car");
        Product product = (Product) context.getBean("product");
     
        System.out.println(car);
        System.out.println(product);


        图片


    ——XML和注解结合使用

    XML:
        在Bean的管理层更加方便,结构层级清晰。

    注解:
        在注入属性的时候比较方便,不需要提供set方法

    步骤:
        1)引入context名称空间:
            <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/beanshttp://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">

        2)在配置文件中添加:
            <context:annotation-config />标签。
            目的是为了使@Resource、@PostConstruct、@Predestory、@Autowired、@Qualifier注解生效。

    示例代码:

    Bean:

    public class CustomerService {
        @Autowired
        @Qualifier("customerDao")
        private CustomerDao customerDao;
        @Autowired
        @Qualifier("orderDao")
        private OrderDao orderDao;
    }

    ----------------------------------------------------------------------------------------------------------------------------

    配置文件:

    <?xml version="1.0" encoding="UTF-8"?>
        xsi:schemaLocation="
     
        <!-- 扫描包中类的注解,因为在配置文件中配置了Bean,所以不需要扫描 -->
        <!-- <context:component-scan base-package="com.wyc.spring3"></context:component-scan> -->
     
        <!-- 使@Autowired等注解生效 -->
        <context:annotation-config />
     
        <bean id="customerDao" class="com.wyc.spring3.demo3.CustomerDao" />
        <bean id="orderDao" class="com.wyc.spring3.demo3.OrderDao" />
        <bean id="customerService" class="com.wyc.spring3.demo3.CustomerService" />
    </beans>

    ——总结

    IoC装配Bean(注解)
        *   @Component,用于描述Spring框架中的Bean
        *   @Repository,用于对Dao实现类进行标注
        *   @Service,用于对Service实现类进行标注
        *   @Constroller,用于对Controller实现类进行标注

        *   DI属性注入
            >   普通属性
                @Value


            >   引用属性
                @Autowired
                @Qualifier
     
                @Resource

  • 相关阅读:
    调整数组顺序使奇数位于偶数前面
    数值的整数次方
    矩形覆盖
    变态跳台阶
    跳台阶
    ubuntu图形界面切换文字界面(文字界面切换图形界面)
    Django环境安装、虚拟机端口映射、pycharm远程配置
    sql注入(一)-----数字型
    mysql基本语法
    渗透测试之------信息收集
  • 原文地址:https://www.cnblogs.com/wwwwyc/p/6375487.html
Copyright © 2011-2022 走看看