Spring - 注解的使用 和 继承的配置
2015-12-28 10:39
344 查看
1.注解
(1)注解就是为了说明java中的某一个部分的作用(Type);(2)注解都可以用于那个部分是@Target注解起的作用;
(3)注解可以标注在ElementType枚举类所指定的位置上;
(4)用来解析注解的类成为注解解析器;
2.依赖注入的注解
(1) bean.xml 导入注解解析器 - context命名空间,只有引用类型可以加上注解,基本类型不可以;(2)@Resource使用步骤:
1) 在spring的配置文件中导入命名空间
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd"
2) 引入注解解析器
<context:annotation-config/>
3) 在spring的配置文件中把bean引入进来
<bean id="person_di" class="cn.labelnet.di.Person">
</bean>
<bean id="student_di" class="cn.labelnet.di.Student"></bean>
4) 在一个类属性上把bean引入进来
@Resource(name="student_di")
private Student student;
5) 在一个类的属性上加上@Resource(name="")
该注解可以用于属性上或者方法上,但一般用于属性上,属性name默认值为"";
(3)示例
1)Person类
public class Person {
private String name;
private Integer age;
@Resource(name="student_di")
private Student student;
public void showStudent(){
this.student.say();
}
}
2)Student类
public class Student {
public void say(){
System.out.println("我是学生");
}
}
3)配置文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd">
<context:annotation-config/>
<bean id="person_di" class="cn.labelnet.di.Person">
</bean>
<bean id="student_di" class="cn.labelnet.di.Student"></bean>
</beans>
4)测试
@Test
public void testDI() {
Person person=(Person) context.getBean("person_di");
person.showStudent();
}
(4)总结:
当启动spring容器的时候,spring容器加载了配置文件,只要遇到bean的配置,就会
为该bean创建对象,在容器范围内查找所有的bean,如果有@Resource注解,判断注解name属
性值是否与speing容器中ID的值做匹配,匹配成功则赋值;
3.类扫描注解
(1)类扫描的注解解析器component : 指的就是一个类;base-package 在该包
(2)基本步骤:
1. 导入命名空间
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd">
2. 引用注解解析器
包含两个功能,类扫描和依赖注入,在base-package包下的查找所有类;
<context:component-scan base-package="包名"></context:component-scan>
3. 配置@Component("")
@Component("a")
public class Person {
private String name;
private Integer age;
@Resource(name = "b")
private Student student;
public void showStudent() {
this.student.say();
}
}
4. 按照@Resource步骤来使用;
(3)示例
1)Person类
@Component("a")
public class Person {
private String name;
private Integer age;
@Resource(name = "b")
private Student student;
public void showStudent() {
this.student.say();
}
}
2)Studnet类
@Component("b")
public class Student {
public void say(){
System.out.println("我是学生 SCAN");
}
}
3)bean配置
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd">
<context:component-scan base-package="cn.lablenet.scan"></context:component-scan>
</beans>
4)测试
@Test
public void testScan() {
Person person=(Person) context.getBean("a");
person.showStudent();
}
(4)总结xml与注解
1. xml书写麻烦,但是效率高;
2. 注解书写简单,但效率低;(可以忽略)
4.示例 - 简单的mvc程序
使用的注解有 : @Repository , @Service , @Controller ,分别对应 dao层,service层,action层;(1)dao 接口
public interface DocumentDao {
void saveDocument();
}
(2)dao实现
@Repository("DocDao")
public class DocumentDaoImpl implements DocumentDao {
@Override
public void saveDocument() {
System.out.println("保存成功");
}
}
(3)service接口
public interface DocumentService {
void saveDocument();
}
(4)service实现
@Service("DocService")
public class DocumentServiceImpl implements DocumentService {
@Resource(name="DocDao")
private DocumentDao docdao;
@Override
public void saveDocument() {
docdao.saveDocument();
}
}
(5)action实现
@Controller("DocController")
public class DocumentView {
@Resource(name="DocService")
private DocumentService doucService;
public void saveDoc(){
doucService.saveDocument();
}
}
(6)bean配置
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd">
<context:component-scan base-package="cn.labelnet.mvc"></context:component-scan>
</beans>
(7)测试
@Test
public void testDocument() {
DocumentView view= (DocumentView)context.getBean("DocController");
view.saveDoc();
}
5.继承配置
继承 :在配置文件中 给 bean 添加 abstruct="true" 属性,告诉spring容器,该bean不能创建对象;
子类想用父类的属性,需要在bean 添加 parent="xxx abstruct" 属性,添加父类bean的id;
示例:
父类 :
public class Person {
private String name;
public void say(){
System.out.println("我是父类");
}
}
子类 :
public class Student extends Person {
}
bean配置 :
<?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:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<bean id="person_ex" class="cn.labelnet.extend.Person" abstract="true"></bean>
<bean id="student_ex" class="cn.labelnet.extend.Student" parent="person_ex"></bean>
</beans>
6.Demo免积分下载
http://download.csdn.net/detail/lablenet/9379973相关文章推荐
- 一个jar包里的网站
- 一个jar包里的网站之文件上传
- 一个jar包里的网站之返回对媒体类型
- PostgreSQL教程(三):表的继承和分区表详解
- Lua面向对象之类和继承浅析
- 浅析Ruby中继承和消息的相关知识
- 设计引导--一个鸭子游戏引发的设计理念(多态,继承,抽象,接口,策略者模式)
- C++实现不能被继承的类实例分析
- PHP类的封装与继承详解
- js继承 Base类的源码解析
- Javascript 面向对象 继承
- JavaScript 继承使用分析
- Javascript面向对象编程(二) 构造函数的继承
- javascript面向对象之Javascript 继承
- JavaScript 对象、函数和继承
- 关于JavaScript的面向对象和继承有利新手学习
- JavaScript 继承详解(一)
- JavaScript 继承详解(二)
- javascript继承的六大模式小结
- JavaScript中的原型和继承详解(图文)