spring开发_Annotation_注解

项目结构:

http://www.cnblogs.com/hongten/gallery/image/112614.html

/spring_1800_Annotation/src/com/b510/app/test/SpringTest.java

 1 package com.b510.app.test;
 2 
 3 import java.util.Arrays;
 4 
 5 import org.springframework.context.ApplicationContext;
 6 import org.springframework.context.support.ClassPathXmlApplicationContext;
 7 
 8 /**
 9  * 测试类
10  * 
11  * @author Hongten
12  * 
13  */
14 public class SpringTest {
15     public static void main(String[] args) {
16         ApplicationContext act = new ClassPathXmlApplicationContext("beans.xml");
17         System.out.println(Arrays.toString(act.getBeanDefinitionNames()));
18     }
19 }

/spring_1800_Annotation/src/com/b510/service/AnimalService.java

 1 package com.b510.service;
 2 
 3 
 4 /**
 5  * 动物抽象类
 6  * 
 7  * @author Hongten
 8  * 
 9  */
10 public interface AnimalService {
11 
12     /**
13      * 获取相关信息
14 */
15     public abstract void getInfo();
16 
17 }

/spring_1800_Annotation/src/com/b510/service/MeatService.java

 1 package com.b510.service;
 2 
 3 /**
 4  * 定义抽象类MeatService肉类
 5  * 
 6  * @author Hongten
 7  * 
 8  */
 9 public interface MeatService {
10 
11     /**
12      * 定义方法whatMeat
13      * 
14      * @return 返回一个字符串
15 */
16     public abstract String whatMeat();
17 }

采用@Component和采用@Component("cat")有什么区别:

采用第一种方式添加注解,Spring会采用约定的方式来为这些Bean实例指定名称,这些Bean实例的名称默认是Bean类的首字母小写,其他部分不变。如:catServiceBean

而采用第二种方式添加注解,相当于覆盖了Spring提供的默认实例名称,所以Bean的实例名称为:cat

/spring_1800_Annotation/src/com/b510/service/impl/CatServiceBean.java

 1 package com.b510.service.impl;
 2 
 3 import javax.annotation.PostConstruct;
 4 import javax.annotation.Resource;
 5 
 6 import org.springframework.stereotype.Component;
 7 
 8 import com.b510.service.AnimalService;
 9 import com.b510.service.MeatService;
10 
11 /**
12  * 定义猫类实现AnimaleService抽象类
13  * 
14  * @author Hongten
15  * 
16  */
17 @Component("cat")
18 public class CatServiceBean implements AnimalService {
19     private int age;
20     private MeatService meatService;
21 
22     public CatServiceBean(){
23         System.out.println("猫类被初始化了");
24     }
25 
26     public int getAge() {
27         return age;
28     }
29 
30     //指定出示化方法:@PostConstruct
31     @PostConstruct
32     @Override
33     public void getInfo() {
34         System.out.println("我是猫,我的年龄是:"+age+",我很喜欢吃"+meatService.whatMeat());
35     }
36     public MeatService getMeatService() {
37         return meatService;
38     }
39 
40     public void setAge(int age) {
41         this.age = age;
42     }
43     @Resource(name="fish")
44     public void setMeatService(MeatService meatService) {
45         this.meatService = meatService;
46     }
47     
48 
49 }

/spring_1800_Annotation/src/com/b510/service/impl/DogServiceBean.java

 1 package com.b510.service.impl;
 2 
 3 import javax.annotation.PostConstruct;
 4 import javax.annotation.PreDestroy;
 5 import javax.annotation.Resource;
 6 
 7 import org.springframework.stereotype.Component;
 8 
 9 import com.b510.service.AnimalService;
10 import com.b510.service.MeatService;
11 
12 /**
13  * 定义DogServiceBean类
14  * 
15  * @author Hongten
16  * 
17  */
18 @Component("dog")
19 public class DogServiceBean implements AnimalService {
20     private int age;
21     // 修饰Field的时候,setter方法可以不要滴
22     @Resource(name = "pork")
23     private MeatService meatService;
24 
25     public DogServiceBean() {
26         System.out.println("狗类被初始化了");
27     }
28 
29     public int getAge() {
30         return age;
31     }
32 
33     // 指定的出示化方法
34     @PostConstruct
35     @Override
36     public void getInfo() {
37         System.out.println("我是狗,我的年龄是:" + age + ",我很喜欢吃"
38                 + meatService.whatMeat());
39     }
40 
41     public MeatService getMeatService() {
42         return meatService;
43     }
44 
45     public void setAge(int age) {
46         this.age = age;
47     }
48 
49     // 指定Bean销毁之前的方法
50     @PreDestroy
51     public void close() {
52         System.out.println("这是Bean DogServiceBean销毁之前的方法");
53     }
54 }

/spring_1800_Annotation/src/com/b510/service/impl/FishServiceBean.java

 1 package com.b510.service.impl;
 2 
 3 import org.springframework.stereotype.Component;
 4 
 5 import com.b510.service.MeatService;
 6 
 7 /**
 8  * 定义鱼肉实现MeatService抽象类
 9  * 
10  * @author Hongten
11  * 
12  */
13 @Component("fish")
14 public class FishServiceBean implements MeatService {
15 
16     public FishServiceBean(){
17         System.out.println("鱼肉类被初始化了");
18     }
19     @Override
20     public String whatMeat() {
21         return "鱼肉";
22     }
23 
24 }

/spring_1800_Annotation/src/com/b510/service/impl/PorkServiceBean.java

 1 package com.b510.service.impl;
 2 
 3 import org.springframework.stereotype.Component;
 4 
 5 import com.b510.service.MeatService;
 6 
 7 /**
 8  * 定义猪肉实现MeatService抽象类
 9  * 
10  * @author Hongten
11  * 
12  */
13 @Component("pork")
14 public class PorkServiceBean implements MeatService {
15 
16     public PorkServiceBean(){
17         System.out.println("猪肉类被初始化了");
18     }
19     @Override
20     public String whatMeat() {
21         return "猪肉";
22     }
23 
24 }

/spring_1800_Annotation/src/beans.xml

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <beans xmlns="http://www.springframework.org/schema/beans"
 3     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
 4     xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
 5     xsi:schemaLocation="http://www.springframework.org/schema/beans
 6            http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
 7            http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd
 8            http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
 9            http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">
10     <!-- 自动扫描指定包及其子包的所有Bean类 -->
11     <context:component-scan base-package="com.b510.service"></context:component-scan>
12     <bean id="cat" class="com.b510.service.impl.CatServiceBean">
13         <property name="age" value="2"></property>
14     </bean>
15     <bean id="dog" class="com.b510.service.impl.DogServiceBean">
16         <property name="age" value="5"></property>
17     </bean>
18 </beans>

运行结果:

 1 2012-3-12 21:17:39 org.springframework.context.support.AbstractApplicationContext prepareRefresh
 2 信息: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@c1b531: display name [org.springframework.context.support.ClassPathXmlApplicationContext@c1b531]; startup date [Mon Mar 12 21:17:39 CST 2012]; root of context hierarchy
 3 2012-3-12 21:17:39 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
 4 信息: Loading XML bean definitions from class path resource [beans.xml]
 5 2012-3-12 21:17:39 org.springframework.beans.factory.support.DefaultListableBeanFactory registerBeanDefinition
 6 信息: Overriding bean definition for bean 'cat': replacing [Generic bean: class [com.b510.service.impl.CatServiceBean]; scope=singleton; abstract=false; lazyInit=false; autowireMode=0; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=null; factoryMethodName=null; initMethodName=null; destroyMethodName=null; defined in file [D:\WordPlace\spring_workspace\spring_1800_Annotation\bin\com\b510\service\impl\CatServiceBean.class]] with [Generic bean: class [com.b510.service.impl.CatServiceBean]; scope=singleton; abstract=false; lazyInit=false; autowireMode=0; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=null; factoryMethodName=null; initMethodName=null; destroyMethodName=null; defined in class path resource [beans.xml]]
 7 2012-3-12 21:17:39 org.springframework.beans.factory.support.DefaultListableBeanFactory registerBeanDefinition
 8 信息: Overriding bean definition for bean 'dog': replacing [Generic bean: class [com.b510.service.impl.DogServiceBean]; scope=singleton; abstract=false; lazyInit=false; autowireMode=0; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=null; factoryMethodName=null; initMethodName=null; destroyMethodName=null; defined in file [D:\WordPlace\spring_workspace\spring_1800_Annotation\bin\com\b510\service\impl\DogServiceBean.class]] with [Generic bean: class [com.b510.service.impl.DogServiceBean]; scope=singleton; abstract=false; lazyInit=false; autowireMode=0; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=null; factoryMethodName=null; initMethodName=null; destroyMethodName=null; defined in class path resource [beans.xml]]
 9 2012-3-12 21:17:39 org.springframework.context.support.AbstractApplicationContext obtainFreshBeanFactory
10 信息: Bean factory for application context [org.springframework.context.support.ClassPathXmlApplicationContext@c1b531]: org.springframework.beans.factory.support.DefaultListableBeanFactory@587c94
11 2012-3-12 21:17:39 org.springframework.beans.factory.support.DefaultListableBeanFactory preInstantiateSingletons
12 信息: Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@587c94: defining beans [cat,dog,fish,pork,org.springframework.context.annotation.internalCommonAnnotationProcessor,org.springframework.context.annotation.internalAutowiredAnnotationProcessor,org.springframework.context.annotation.internalRequiredAnnotationProcessor]; root of factory hierarchy
13 猫类被初始化了
14 鱼肉类被初始化了
15 我是猫,我的年龄是:2,我很喜欢吃鱼肉
16 狗类被初始化了
17 猪肉类被初始化了
18 我是狗,我的年龄是:5,我很喜欢吃猪肉
19 [cat, dog, fish, pork, org.springframework.context.annotation.internalCommonAnnotationProcessor, org.springframework.context.annotation.internalAutowiredAnnotationProcessor, org.springframework.context.annotation.internalRequiredAnnotationProcessor]

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏大数据杂谈

【Excel】用公式提取Excel单元格中的汉字

2915
来自专栏小樱的经验随笔

Code forces 719A Vitya in the Countryside

A. Vitya in the Countryside time limit per test:1 second memory limit per test:2...

3546
来自专栏函数式编程语言及工具

FunDA(1)- Query Result Row:强类型Query结果行

    FunDA的特点之一是以数据流方式提供逐行数据操作支持。这项功能解决了FRM如Slick数据操作以SQL批次模式为主所产生的问题。为了实现安全高效的数据...

2029
来自专栏Java成神之路

Java_数据交换_JAXB_用法入门

JAXB(Java Architecture for XML Binding) 是一个业界的标准,是一项可以根据XML Schema产生Java类的技术。该过程...

1113
来自专栏码匠的流水账

聊聊eureka client的fetch-remote-regions-registry属性

本文主要研究一下eureka client的fetch-remote-regions-registry属性

1571
来自专栏mukekeheart的iOS之旅

No.009 Palindrome Number

9. Palindrome Number Total Accepted: 136330 Total Submissions: 418995 Difficulty...

2317
来自专栏cmazxiaoma的架构师之路

你真的了解Spring MVC处理请求流程吗?

3414
来自专栏技术专栏

java程序 如何优雅地读取xml文件

1.1K2
来自专栏前端儿

Tree

Little Valentine liked playing with binary trees very much. Her favorite game wa...

1642
来自专栏码匠的流水账

springboot2自定义statsd指标前缀

springboot2引入了micrometer,1.x版本的spring.metrics.export.statsd.prefix在2版本中已经被标记为废弃,...

1452

扫码关注云+社区

领取腾讯云代金券