专栏首页csspring的bean的注解

spring的bean的注解

bean可以xml配置,也可以采用注解,注解更加简单,注解也需要配置相关的xml文件。因为bean的装配,采用注解和使用配置不同,所以注解的schema和命名空间都不一样。

重要的xml配置地方

    <!-- 配置 注解Bean 所在包 -->  
    <context:annotation-config/>
    <context:component-scan base-package="dflx.test"></context:component-scan>

bean的实列化采用 Component注解,简单属性采用 Value注解,复杂属性采用 Autowired注解。

spring2.5 引入@Component 等效三个衍生注解 @Repository 用于对DAO实现类进行标注 (持久层) @Service 用于对Service实现类进行标注 (业务层) @Controller 用于对Controller实现类进行标注 (表现层)

Autowired 默认按照类型进行注入, @Value @Autowired注解都能够修饰 成员变量 或者 setter方法,如果修改成员变量,不需要提供setter方法。

看一个实列,有Person类,Student类,在Student类中注入Person的对象。

其中Person类,有@Component,@Value注入

@Component(value="person")
public class Person {
    @Value("alice ")
    private String name;
    
    public String  getName()
    {
        return name;
    }
    
    public void print()
    {
        System.out.println("对象调用了我啊");
    }


}

Studet中有 Autowired注释。

@Component(value="student")
public class Student {
    
    @Autowired
    @Qualifier("person")
    //上面二条等价于 其 @Resource(name="userDAO")
    private Person person;
    
    public void displayName()
    {
        System.out.println("name is="+person.getName());
    }
    
}

在main中进行测试

public class Main {

    public static void main(String[] args) {
        
       ApplicationContext app=new ClassPathXmlApplicationContext("bean.xml");
        
        Student student=(Student) app.getBean("student");
        
        student.displayName();

    }

}

结果如下所示

name is=alice 

bean的初始化和销毁

xml中配置bean的初始化为

<bean id="name" class="name"  init-method="function name">

采用注解,@PostConstruct 注释。

xml中 bean的销毁为

<bean id="name" class="name"  destroy-method="function name">

采用注解为 @PreDestroy 注释

来一个InitDestDem类测试一下。

@Component("idtest")
public class InitDestDem {
    
    @PostConstruct
    public  void initFun()
    {
        System.out.println(" inin function start");
    }
    
     @PreDestroy
    public void destroyFun()
    {
        System.out.println(" destroy function start");
    }
    
    
}

在main方法测试结果

    public static void main(String[] args) {
        
        ClassPathXmlApplicationContext app=new ClassPathXmlApplicationContext("bean.xml");
        
        InitDestDem ind=(InitDestDem) app.getBean("idtest");
        
         System.out.println(ind);
         
         //销毁方法执行,必须调用 applicationcontest的 close方法。
         
      app.close();
    }

最后的结果如下

 inin function start
dflx.test.InitDestDem@42607a4f
九月 09, 2018 12:45:26 下午 org.springframework.context.support.AbstractApplicationContext doClose
信息: Closing org.springframework.context.support.ClassPathXmlApplicationContext@728938a9: startup date [Sun Sep 09 12:45:25 CST 2018]; root of context hierarchy
 destroy function start

bean的作用域 也可以采用 注解 @Scope 来说明, singleton 单例是默认的。

现在再 InitDestDem上采用 @Scope("prototype") 注解一下,在生产2个对象,看其的hash的值

 inin function start
dflx.test.InitDestDem@25bbf683
 inin function start
dflx.test.InitDestDem@6ec8211c

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

我来说两句

0 条评论
登录 后参与评论

相关文章

  • spring的AOP知识点2.0

    一AOP相关概念 Joinpoint(连接点):所谓连接点是指那些被拦截到的点。在spring中,这些点指的是方法,因为spring只支持方法类型的连接点.

    东风冷雪
  • 用列图

    东风冷雪
  • python类与对象

    东风冷雪
  • PHP设计模式之组合模式

    互联网公司流行扁平化管理,也就是管理层级尽量少于或者不超过三层,作为一个底层的码农,你的CEO和你的职级也就相差3层以内。但是很多传统企业,则会有非常深的层级关...

    硬核项目经理
  • 实现一个自己的MVVM

    vue数据双向绑定是通过数据劫持结合发布者-订阅者模式的方式来实现的,那么vue是如果进行数据劫持的,我们可以先来看一下通过控制台输出一个定义在vue初始化数据...

    前端迷
  • PHP设计模式——模板方法

    管理公司员工的日常行程可能是一项耗时的工作。如果可以使用程序将日常任务编程为自动发生,那将容易得多。Mark在Yahaa Inc工作了四年, 他是一名程序员,他...

    Lemon黄
  • SpringBoot系列教程之Bean之指定初始化顺序的若干姿势

    上一篇博文介绍了@Order注解的常见错误理解,它并不能指定 bean 的加载顺序,那么问题来了,如果我需要指定 bean 的加载顺序,那应该怎么办呢?

    一灰灰blog
  • spring之配置单例的集合bean,以供多个bean进行引用

    这种情况下,是在一个bean的里面进行配置的,假设现在我们有另外一个bean,也需要使用List集合里的bean,那么应该怎么做呢?

    绝命生
  • 深入分析PHP设计模式

    工厂模式,顾名思义,如同工厂一样,你把原材料放入工厂中,出来的是成品,而你并不需要知道工厂里做了什么,工厂模式主要用于解耦。

    砸漏
  • PHP设计模式之装饰器(装饰者)模式(Decorator)入门与应用详解

    本文实例讲述了PHP设计模式之装饰器(装饰者)模式(Decorator)入门与应用。分享给大家供大家参考,具体如下:

    砸漏

扫码关注云+社区

领取腾讯云代金券