JAVA_OA管理系统(四):基于注解的组件扫描

原创 2016年05月30日 15:14:38

总述

有关:

本篇文章是和(三)紧挨着的兄弟文章,代码同样是(三)中的那些。


内容(这篇只是一些新手入门,进阶请看番外)

     1  什么是组件扫描

     2  指定扫描类路径
     3  自动扫描的注解标记
     4  自动扫描注解命名
     5  指定组件的作用域
     6  指定初始化和销毁方法
     7  指定依赖注入关系

     8  注入spring的表达式  


1  什么是组件扫描

         指定一个包路径,Spring会自动扫描该包及其子包所有组件类,当发现组件类定义
前有特定的注解标记时,就将该组件纳入到Spring容器中,等价于原来的XML配置bean
的功能。

2  指定扫描类路径

        使用组件扫描,首先需要在XML配置中指定扫描父级package路径,容器会自动去扫描
Com.throne包及其自包下的所有组件,并且实例化bean

<context:component-scan base-package="com.throne"></context:component-scan>

而我们的(三)中的java包都在该路径下;

3  自动扫描的注解标记

        指定扫描的类路径后,并且不是所有的该路径下的组件都会被扫描到Spring容器,
只有在组件类定义前有一下标记的,才会扫描到Spring容器。

这里是各种注解的含义

 4  自动扫描注解命名(需要导入webMVC的jar包)


        当一个组件在扫描过程中被检测到时,会生成一个默认的id值,默认id值为小写
  开头的类名,也可以在注解中自定义id。注意:使用注解既然要导入jar包,那么自然要import jar包;
//比如我们之前的Book类

@Component("book")
public class Book implements Serializable{

//属性-->也是注解来注入的
       @Value("100")        
        private String bookPrice;
        @Value("hadoop权威指南")
        private String bookName;

//getter and setter

}

//至于获取,则变为注解时添加的ID

Book b1=ac.getBean("book",Book.class);//没有添加id时,为默认的小写首字母的类名(类的规范:首字母大写)
System.out.println(s.getBook().getBookName());
System.out.println(s.getBook().getBookId());

结果:
     hadoop权威指南
     100

这时则不需要再配置xml文件中的bean,因此可见通过更方便的注解来代替原来的xml文件配置,则大大简化编程流程。

5  指定组件的作用域

         Spring管理的组件,默认的作用域是”singleton”(单例模式),如果需要其他的作用域
        也可以使用@Scope注解,只要在注解中提供作用域的名称即可,此处属性值与(二)中所讲的是一样的。
//比如我们之前的Book类

@Component("book")
public class Book implements Serializable{

//属性-->也是注解来注入的
       @Value("100")        
        private String bookPrice;
        @Value("hadoop权威指南")
        private String bookName;

//getter and setter

}

//至于获取,则变为注解时添加的ID

Book b1=ac.getBean("book",Book.class);
Book b2=ac.getBean("book",Book.class);


System.out.println(b1==b2);

结果:
     true
而
@Component("book")
@Scope("prototype")
public class Book implements Serializable{
}

System.out.println(b1==b2);

此时运行结果则为:
       false

6  指定初始化和销毁方法 (了解即可)

       @PostConstruct 指定初始化方法
       @PreDestroy 指定销毁方法

注意:但单例的时候才能关闭,多例时没有关闭

AbstractApplicationContext才有销毁,他是ApplicationContext的父类,(二)中提过;

        @PostConstruct
        public void init(){
           System.out.println("Book被 初始化了");
        }
        @PreDestroy
        public void destroy(){
           System.out.println("Book被销毁了");
        }


7  指定依赖注入关系

           具有依赖关系的bean对象,利用下面任意一种注解都可以实现关系的注入
          基本类型的值注入可以使用 @value() 标记


//       @Component(通用注解,当你不知道用什么的时候,可以试试这个)

 具有依赖关系的bean对象,利用下面任意一种注解都可以实现关系的注入
         注意: Setter注入推荐使用@Resource  构造器推荐使用@Autowired


         1  @Autowired/@Qualifier   可以处理构造器注入和Setter注入
              @Autowired写在构造器前面,申明需要为其注入bean
              @Qualifier写在参数 前面,申明需要注入的bean的id

//            这样可以减少代码量,简化编写流程。

详细的可以看这篇文章(这篇文章的代码比较详细):

                                  Spring@Autowired注解与自动装配


@Autowired写在属性上面    只会执行构造器的一句 赋值 不会全部执行          
              如果在单例模式中 @Qualifier可以省略

2 @Autowired也可以写在set方法上面
             注入对象单例时,@Qualifier可以省略。此时,Spring按照类型匹配参数。
             @Autowired也可以写在属性上,作用和写在set方法上类似,但只会执行
             赋值语句

3  使用@Resouce注解
           只能用在set方法上和属性上,用在set 方法中 ,执行所有的方法体(

比如

       在setter中添加一句:System.out.println("我在set中被@Resouce执行了!");

那么在执行zhegeset时,就会在控制台打印输出这句话。

),用在属性上
            只执行方法的赋值

     //假如在一个类(比如是store)中这样写,也就是将@Resource,写在 类名  名字;前
      @Resource
      private Book book;
     // 此时,该类将会获得其中的方法
      String str="applicationContext.xml";
       ApplicationContext ac=new ClassPathXmlApplicationContext(str);
      Store s=ac.getBean("store",Teacher.class);
              System.out.println(s.getBook().getName());

@Component("book")//这是此时的Book类
public class Book implements Serializable{
	@Value("100")
	private String bookId;
	@Value("hadoop权威指南")
	private String bookName;
	public Book() {
		System.out.println("我创建了");
	}
	public String getBookId() {
		return bookId;
	}
	public void setBookId(String bookId) {
		this.bookId = bookId;
	}
	public String getBookName() {
		return bookName;
	}
	public void setBookName(String bookName) {
		this.bookName = bookName;
	}
	@PostConstruct
	public void init(){
		System.out.println("我被初始化了");
	}
	@PreDestroy
	public void destroy(){
		System.out.println("我被销毁了");
	}
	

}


/*则会输出:
我创建了//         创建Book
我被初始化了//      init()
hadoop权威指南//      <span style="font-family: Arial, Helvetica, sans-serif;">.getBook().getName()*/</span>

常用于,减少代码量,进行对象注入。

注意点:

1) @Resouce是JAVAEE中的,建议使用降低与spring的耦合,而@Autowired是Spring中的。

2)@Autowired查找类型是“byType”,@Resouce是"byName",@Qualifier("XXX")与@Autowired配合可以将byType转为byName,其中XXX为name;










版权声明:转载请标明出处:http://blog.csdn.net/fontthrone,也请保留该信息

深入Spring:自定义注解加载和使用

前言 在工作中经常使用Spring的相关框架,免不了去看一下Spring的实现方法,了解一下Spring内部的处理逻辑。特别是开发Web应用时,我们会频繁的定义@Controller,@Servic...

Bootstrap框架---CSS全局样式之按钮样式

预定义样式 首先,我们先要链接css样式和JQ文件 使用下面列出的类可以快速创建一个带有预定义样式的按钮。 Default Primary Success ...

获取指定包下所有自定义注解并提取注解信息

自定义了Controller和RequestMapping两个注解,先去扫描加了@Controller注解的类,接着扫描这些类下面加了@RequestMapping注解的方法,然后通过Java的反射i...

JAVA_OA管理系统(四)番外篇:使用Spring注解注入属性

本文介绍了使用Spring注解注入属性的方法。使用注解以前,注入属性通过类以及配置文件来实现。现在,注入属性可以通过引入@Autowired注解,或者@Resource,@Qualifier,@Pos...

java项目一------OA报名与审核管理系统

采用JavaWeb技术实现采用MVC和分层开发,通过本项目可以很熟练的掌握JavaWeb(Servlet、JSP、EL、标签)的开发技术 项目的实现:javaweb技术–servlet,jsp,js...

JAVA_OA管理系统(二)番外篇:IoC原理

在网上看到一篇文章,感觉写得挺不错的,转载一下,本文转载自:http://blog.csdn.net/m13666368773/article/details/7802126 一. IoC理论的背景...

java_OA管理系统(一):Servlet总结案例仿网络聊天室

因为我们学校的软件联盟要为我们校区开发一个OA系统,为此我将其所需要的一些技术进行汇总,以便web组组员开发所用. 第一篇是关于Servlet的一个汇总案例,算是开个简单的小头. 一.总述 代码来源于...

JAVA_OA管理系统(二):SpringMVC笔记基础篇01注入方法

将spring的applicationContext.xml导入src根目录(建包导入也可以,建包的标准com.Throne.Font.until), 导入jar包,将文件复制粘贴进入\WebRoot...

权限管理系统(用户信息管理模块业务组件实现代码,带注解)

用户信息管理模块业务组件实现代码,带注解,留意注解规范和代码命名规范。UserServiceImpls.JAVA文件代码 package com.amos.service.impls;import j...
  • javacab
  • javacab
  • 2011年02月02日 11:32
  • 1774
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:JAVA_OA管理系统(四):基于注解的组件扫描
举报原因:
原因补充:

(最多只允许输入30个字)