SSH与SSM学习之Spring09——Spring使用注解配置

SSH与SSM学习之Spring09——Spring使用注解配置

一、步骤

1.除了之前导入的包,还需要导入 spring-aop

2.开启使用注解代理配置文件

<?xml version="1.0" encoding="UTF-8" ?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns="http://www.springframework.org/schema/beans"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd ">

<!-- 指定扫描com.qwm.spring2.bean报下的所有类中的注解.
 注意:扫描包时.会扫描指定包下的所有子孙包
-->
<context:component-scan base-package="com.qwm.spring2.bean"></context:component-scan>

</beans>

3.在类中使用注解完成配置


二、将对象注册到容器

把对象配置到容器中,可以下面的四个注解

@Component("user") //下面三个和这个其实是一样的,只是下面三个起到标识的作用
@Service("user") // service层
@Controller("user") // web层
@Repository("user")// dao层

例如

//@Component("user") //下面三个和这个其实是一样的,只是下面三个起到标识的作用
//@Service("user") // service层
//@Controller("user") // web层
@Repository("user")// dao层
public class User {
    .....
}

三、修改对象的作用范围

可以使用的注解是

@Scope

例如

//指定对象的作用范围
@Scope(scopeName="singleton")
public class User {
    ....
}

或者

//指定对象的作用范围
@Scope(scopeName="prototype")
public class User {
    ....
}

四、值类型注入

可以使用的注解是

@Value(...)

可以写在属性中,也可以写在set方法中

例如

//通过反射的Field赋值,破坏了封装性
@Value("wiming")
private String name;

或者

//通过set方法赋值,推荐使用.
@Value("wiming")
public void setName(String name){
    this.name = name;
}

五、引用类型注入

可以使用的注解如下

@Autowired //自动装配
//问题:如果匹配多个类型一致的对象.将无法选择具体注入哪一个对象.

@Qualifier(name)//使用@Qualifier注解告诉spring容器自动装配哪个名称的对象

@Resource(name)//手动注入,指定注入哪个名称的对象

使用 @Autowired 如下

@Autowired //自动装配
//问题:如果匹配多个类型一致的对象.将无法选择具体注入哪一个对象.
private Car car;

使用 @Qualifier(name) 如下

@Qualifier("car2")//使用@Qualifier注解告诉spring容器自动装配哪个名称的对象
 private Car car;

使用 @Resource(name) 如下

@Resource(name="car")//手动注入,指定注入哪个名称的对象
 private Car car;

六、初始化和销毁方法

初始化方法可以使用 @PostConstruct 注解

例如

@PostConstruct //对象创建后调用
public void init(){
    System.out.println("--初始化方法--");
}

销毁方法可以使用 @PreDestroy 注解

例如

@PreDestroy //对象销毁之前调用
public void destory(){
    System.out.println("--销毁方法--");
}

七、测试小例子

7.1 Car 汽车类

package com.qwm.spring2.bean;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

/**
 * @author:qiwenming
 * @date:2017/10/12 0012   23:34
 * @description:
 */

@Component("car")
public class Car {
    @Value("玛莎拉蒂")
    private String name;

    @Value("绿色")
    private String color;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getColor() {
        return color;
    }

    public void setColor(String color) {
        this.color = color;
    }

    @Override
    public String toString() {
        return "Car{" +
                "name='" + name + '\'' +
                ", color='" + color + '\'' +
                '}';
    }
}

7.2 User 用户类

package com.qwm.spring2.bean;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Repository;

import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import javax.annotation.Resource;

/**
 * @author:qiwenming
 * @date:2017/10/12 0012   23:34
 * @description:
 */
//@Component("user") //下面三个和这个其实是一样的,只是下面三个起到标识的作用
//@Service("user") // service层
//@Controller("user") // web层
@Repository("user")// dao层
//指定对象的作用范围
@Scope(scopeName="singleton")
public class User {
    @Value("wiming")
    private String name;

    @Value("18")
    private int age;

    //@Autowired //自动装配
    //问题:如果匹配多个类型一致的对象.将无法选择具体注入哪一个对象.

    //@Qualifier("car2")//使用@Qualifier注解告诉spring容器自动装配哪个名称的对象

    @Resource(name="car")//手动注入,指定注入哪个名称的对象
    private Car car;

    @PostConstruct //对象创建后调用
    public void init(){
        System.out.println("--初始化方法--");
    }

    @PreDestroy //对象销毁之前调用
    public void destory(){
        System.out.println("--销毁方法--");
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public Car getCar() {
        return car;
    }

    public void setCar(Car car) {
        this.car = car;
    }

    @Override
    public String toString() {
        return "User{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", car=" + car +
                '}';
    }
}

7.3 配置文件

<?xml version="1.0" encoding="UTF-8" ?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns="http://www.springframework.org/schema/beans"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd ">

<!-- 指定扫描com.qwm.spring2.bean报下的所有类中的注解.
 注意:扫描包时.会扫描指定包下的所有子孙包
-->
<context:component-scan base-package="com.qwm.spring2.bean"></context:component-scan>

</beans>

7.4 测试代码

package com.qwm.spring2.a_annotation;

import com.qwm.spring2.bean.User;
import org.junit.Test;
import org.springframework.context.support.ClassPathXmlApplicationContext;

/**
 * @author:qiwenming
 * @date:2017/10/12 0012   23:39
 * @description:注解 测试
 */
public class Demo {

    @Test
    public void test1(){
        ClassPathXmlApplicationContext ac = new ClassPathXmlApplicationContext("com/qwm/spring2/applicationContext.xml");
        User user = (User) ac.getBean("user");
        System.out.println(user);
        ac.close();
    }
}

7.5 运行结果

--初始化方法--
User{name='wiming', age=18, car=Car{name='玛莎拉蒂', color='绿色'}}
--销毁方法--

八、源码下载

https://github.com/wimingxxx/spring01/tree/master/src/com/qwm/spring2

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值