您的位置:首页 > 编程语言 > Java开发

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

2017-10-22 17:58 579 查看
SSH与SSM学习之Spring09Spring使用注解配置
一步骤

二将对象注册到容器

三修改对象的作用范围

四值类型注入

五引用类型注入

六初始化和销毁方法

七测试小例子
1 Car 汽车类

2 User 用户类

3 配置文件

4 测试代码

5 运行结果

八源码下载

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐