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
示例代码:
/**
配置文件:
</beans>
除了使用@Component外,Spring还提供了三个功能基本和@Component等效的注解:
1)@Repository
用于对DAO实现类进行标注
2)@Service
用于对Service实现类进行标注
3)@Controller
用于对Controller实现类进行标注
这三个注解是为了让标注类本身的用途清晰,进行分层开发,Spring在后续版本会对其进行增强。
——Bean的属性注入
1、普通属性
直接使用@Value注解进行注入
@Value(value="哈哈哈")
2、对象属性
/*
3、Spring提供对JSR-250中定义@Resource标准注解的支持
@Resource注解有一个属性:
* name:
如果不写,则相当于自动装配,功能与Autowired相同。
如果指定name的属性,例如:@Resource(name="userDao"),则相当于@Qualifier("userDao");
4、示例代码:
——使用注解配置Bean的其他属性
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");
}
}
----------------------------------------------------------------------------------------------------------------------------配置文件:
<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.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注解
* 如果想根据名称注入,就使用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
@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"?>
<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">
<!-- 扫描包中类的注解,因为在配置文件中配置了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