IT袋

当前位置:主页 > 经验教程 > 建站编程 >

Spring注解开发

Spring注解开发 Spring注解驱动开发(2)

时间:2024-01-30 00:52:32 来源:IT袋 作者:马勇
导读:Spring注解开发,使用@Scope定义bean作用范围 @Component@Scope("singleton")public class BookUtils {} bean生命周期注解配置 使用@PostConstruct、@PreDestroy定义bean生命周期 @Component@Scope("single

Spring注解开发

  • 使用@Scope定义bean作用范围
@Component
@Scope("singleton")
public class BookUtils {
}

bean生命周期注解配置

  • 使用@PostConstruct、@PreDestroy定义bean生命周期
@Component
@Scope("singleton")
public class BookUtils {
    public BookUtils() {
        System.out.println("book constructor ...");
    }
    @PostConstruct
    public void init(){
        System.out.println("book init ...");
    }
    @PreDestroy
    public void destroy(){
        System.out.println("book destory ...");
    }
}

注意:@PostConstruct和@PreDestroy注解是jdk中提供的注解,从jdk9开始,jdk中的javax.annotation包被移除了,也就是说这两个注解就用不了了,可以额外导入一下依赖解决这个问题。

<dependency>
  <groupId>javax.annotation</groupId>
  <artifactId>javax.annotation-api</artifactId>
  <version>1.3.2</version>
</dependency>
  • 测试类
@Test
public void testPureAnnotation() {
    //AnnotationConfigApplicationContext加载Spring配置类初始化Spring容器
    AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(SpringConfig.class);
    BookUtils bookUtils = (BookUtils) ctx.getBean("bookUtils");
    System.out.println(bookUtils);
    //关闭容器
    ctx.close();
}

4、依赖注入

使用@Autowired注解开启自动装配模式(默认按类型,如果有多个类型相同的按名称)

@Service
public class BookServiceImpl implements BookService {
    
    @Autowired
    private BookDao bookDao;
    @Override
    public void save() {
        System.out.println("bookService 保存数据");
        bookDao.save();
    }
}

注意:

  • 自动装配基于反射设计创建对象并暴力反射对应属性为私有属性初始化数据,因此无需提供setter方法
  • 自动装配建议使用无参构造方法创建对象(默认)

使用@Qualifier注解开启指定名称装配bean

@Service
public class BookServiceImpl implements BookService {
    @Autowired
    @Qualifier("bookDao")
    private BookDao bookDao;
    @Override
    public void save() {
        System.out.println("bookService 保存数据");
        bookDao.save();
    }
}

不管是使用配置文件还是配置类,都必须进行对应的Spring注解包扫描才可以使用。

@Autowired默认按照类型自动装配,如果IoC容器中同类的Bean有多个,那么默认按照变量名和Bean的名称匹配,建议使用@Qualifier注解指定要装配的bean名称

简单类型注入

使用@Value实现简单类型注入

@Repository("bookDao")
public class BookDaoImpl implements BookDao {
    //@Value:注入简单类型(无需提供set方法)
    @Value("${name}")
    private String name;
    public void save() {
        System.out.println("book dao save ..." + name);
    }
}

相关阅读

  • 什么是服务器机架单元U?

    什么是服务器机架单元U?

    今天为网友们详解什么是服务器机架单元U的电脑方面的小经验,接下来小编为网友介绍。 服务器机架单元U,通常简称为U,是一个用于测量服务器机架的总高度的标准单位。 这个标准的主要目

  • DNS协议在哪一层 dns服务器工作在哪一层

    DNS协议在哪一层 dns服务器工作在哪一层

    dns服务器工作在哪一层()。 A.传输层 B.网络层 C.数据链路层 D.应用层 正确答案 : D.应用层 此题解析: DNS协议均位于OSI或TCP/IP参考模型的应用层。 DNS域名系统主要负责记录互联网中主机名和该

  • Redis持久化有哪几种方式 各有哪些优缺点?

    Redis持久化有哪几种方式 各有哪些优缺点?

    今天为大家介绍Redis持久化有哪几种方式方面的知识,具体内容如下: 思考:redis做为缓存,数据的持久化是怎么做的? 在Redis中提供了两种数据持久化的方式: RDB AOF 1. RDB RDB全称Redis Database

  • javascript弹出提示框 对话框代码及用法

    javascript弹出提示框 对话框代码及用法

    javascript基础知识之弹出对话框、提示框代码 ,本文将给大家介绍如何使用:alert命令代码。 javascript基础知识之弹出对话框、提示框代码示例: script type="text/javascript"alert("我是提示文字!");