前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >spring开发_Annotation_注解

spring开发_Annotation_注解

作者头像
Hongten
发布2018-09-13 16:49:31
3440
发布2018-09-13 16:49:31
举报
文章被收录于专栏:HongtenHongten

项目结构:

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]
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2012-03-12 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档