Spring-学习笔记04【Spring的常用注解】

  • Java后端 学习路线 笔记汇总表【黑马程序员】
  1. Spring-学习笔记01【Spring框架简介】【day01】
  2. Spring-学习笔记02【程序间耦合】
  3. Spring-学习笔记03【Spring的IOC和DI】
  4. Spring-学习笔记04【Spring的常用注解】【day02】
  5. Spring-学习笔记05【基于XML的IOC的案例】
  6. Spring-学习笔记06【Spring的新注解】
  7. Spring-学习笔记07【银行转账案例】【day03】
  8. Spring-学习笔记08【面向切面编程AOP】
  9. Spring-学习笔记09【JdbcTemplate的基本使用】【day04】
  10. Spring-学习笔记10【Spring事务控制】

目录

01 今日课程内容介绍

02 常用IOC注解按照作用分类

03 用于创建的Component注解

04 由Component衍生的注解

05 自动按照类型注入

06 用于注入数据的注解

07 改变作用范围以及和生命周期相关的注解

7.1、AccountServiceImpl.java

7.2、Client.java


01 今日课程内容介绍

spring第二天:spring基于注解的IOC以及IoC的案例
1、spring中ioc的常用注解
2、案例使用xml方式和注解方式实现单表的CRUD操作
    持久层技术选择:dbutils
3、改造基于注解的ioc案例,使用纯注解的方式实现
    spring的一些新注解使用
4、spring和Junit整合

02 常用IOC注解按照作用分类

        学习基于注解的 IoC 配置,大家脑海里首先得有一个认知,即注解配置和xml配置要实现的功能都是一样的,都是要降低程序间的耦合。只是配置的形式不一样。
        关于实际的开发中到底使用xml还是注解,每家公司有着不同的使用习惯。所以这两种配置方式我们都需要掌握。
        我们在讲解注解配置时,采用上一章节的案例,把spring的xml配置内容改为使用注解逐步实现。

Spring-学习笔记04【Spring的常用注解】_第1张图片

03 用于创建的Component注解

Spring-学习笔记04【Spring的常用注解】_第2张图片


       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd">

   
   

Spring-学习笔记04【Spring的常用注解】_第3张图片

04 由Component衍生的注解

Spring-学习笔记04【Spring的常用注解】_第4张图片

05 自动按照类型注入

Spring-学习笔记04【Spring的常用注解】_第5张图片 自动按照类型注入

06 用于注入数据的注解

 * 用于注入数据的
 *      他们的作用就和在xml配置文件中的bean标签中写一个标签的作用是一样的
 *      Autowired:
 *          作用:自动按照类型注入。只要容器中有唯一的一个bean对象类型和要注入的变量类型匹配,就可以注入成功
 *                如果ioc容器中没有任何bean的类型和要注入的变量类型匹配,则报错。
 *                如果Ioc容器中有多个类型匹配时:
 *          出现位置:
 *              可以是变量上,也可以是方法上
 *          细节:
 *              在使用注解注入时,set方法就不是必须的了。
 *      Qualifier:
 *          作用:在按照类中注入的基础之上再按照名称注入。它在给类成员注入时不能单独使用。但是在给方法参数注入时可以(稍后我们讲)
 *          属性:
 *              value:用于指定注入bean的id。
 *      Resource:
 *          作用:直接按照bean的id注入。它可以独立使用
 *          属性:
 *              name:用于指定bean的id。
 *      以上三个注入都只能注入其他bean类型的数据,而基本类型和String类型无法使用上述注解实现。
 *      另外,集合类型的注入只能通过XML来实现。
 *      Value:
 *          作用:用于注入基本类型和String类型的数据
 *          属性:
 *              value:用于指定数据的值,它可以使用spring中SpEL(也就是spring中的el表达式)
 *                      SpEL的写法:${表达式}

07 改变作用范围以及和生命周期相关的注解

 * 用于改变作用范围的
 *      他们的作用就和在bean标签中使用scope属性实现的功能是一样的
 *      Scope
 *          作用:用于指定bean的作用范围
 *          属性:
 *              value:指定范围的取值。常用取值:singleton prototype
 *
 * 和生命周期相关(了解)
 *      他们的作用就和在bean标签中使用init-method和destroy-methode的作用是一样的
 *      PreDestroy
 *          作用:用于指定销毁方法
 *      PostConstruct
 *          作用:用于指定初始化方法

Spring-学习笔记04【Spring的常用注解】_第6张图片

7.1、AccountServiceImpl.java

package com.itheima.service.impl;

import com.itheima.dao.IAccountDao;
import com.itheima.service.IAccountService;
import org.springframework.stereotype.Service;

import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import javax.annotation.Resource;

/**
 * 账户的业务层实现类
 *
 * 曾经XML的配置:
 *  
 *      
 *  
 *
 * 用于创建对象的
 *      他们的作用就和在XML配置文件中编写一个标签实现的功能是一样的
 *      Component:
 *          作用:用于把当前类对象存入spring容器中
 *          属性:
 *              value:用于指定bean的id。当我们不写时,它的默认值是当前类名,且首字母改小写。
 *      Controller:一般用在表现层
 *      Service:一般用在业务层
 *      Repository:一般用在持久层
 *      以上三个注解他们的作用和属性与Component是一模一样。
 *      他们三个是spring框架为我们提供明确的三层使用的注解,使我们的三层对象更加清晰
 *
 *
 * 用于注入数据的
 *      他们的作用就和在xml配置文件中的bean标签中写一个标签的作用是一样的
 *      Autowired:
 *          作用:自动按照类型注入。只要容器中有唯一的一个bean对象类型和要注入的变量类型匹配,就可以注入成功
 *                如果ioc容器中没有任何bean的类型和要注入的变量类型匹配,则报错。
 *                如果Ioc容器中有多个类型匹配时:
 *          出现位置:
 *              可以是变量上,也可以是方法上
 *          细节:
 *              在使用注解注入时,set方法就不是必须的了。
 *      Qualifier:
 *          作用:在按照类中注入的基础之上再按照名称注入。它在给类成员注入时不能单独使用。但是在给方法参数注入时可以(稍后我们讲)
 *          属性:
 *              value:用于指定注入bean的id。
 *      Resource:
 *          作用:直接按照bean的id注入。它可以独立使用
 *          属性:
 *              name:用于指定bean的id。
 *      以上三个注入都只能注入其他bean类型的数据,而基本类型和String类型无法使用上述注解实现。
 *      另外,集合类型的注入只能通过XML来实现。
 *      Value:
 *          作用:用于注入基本类型和String类型的数据
 *          属性:
 *              value:用于指定数据的值,它可以使用spring中SpEL(也就是spring中的el表达式)
 *                      SpEL的写法:${表达式}
 *
 * 用于改变作用范围的
 *      他们的作用就和在bean标签中使用scope属性实现的功能是一样的
 *      Scope
 *          作用:用于指定bean的作用范围
 *          属性:
 *              value:指定范围的取值。常用取值:singleton prototype
 *
 * 和生命周期相关(了解)
 *      他们的作用就和在bean标签中使用init-method和destroy-methode的作用是一样的
 *      PreDestroy
 *          作用:用于指定销毁方法
 *      PostConstruct
 *          作用:用于指定初始化方法
 */
@Service("accountService")
//@Scope("prototype")
public class AccountServiceImpl implements IAccountService {
    // @Autowired
    // @Qualifier("accountDao1")
    @Resource(name = "accountDao2")
    private IAccountDao accountDao = null;

    @PostConstruct
    public void init() {
        System.out.println("初始化方法执行了...");
    }

    @PreDestroy
    public void destroy() {
        System.out.println("销毁方法执行了...");
    }

    public void saveAccount() {
        accountDao.saveAccount();
    }
}

7.2、Client.java

package com.itheima.ui;

import com.itheima.service.IAccountService;
import org.springframework.context.support.ClassPathXmlApplicationContext;

/**
 * 模拟一个表现层,用于调用业务层
 */
public class Client {
    /**
     * @param args
     */
    public static void main(String[] args) {
        //1.获取核心容器对象
        //ApplicationContext ac = new ClassPathXmlApplicationContext("bean.xml");
        ClassPathXmlApplicationContext ac = new ClassPathXmlApplicationContext("bean.xml");
        //2.根据id获取Bean对象
        IAccountService as = (IAccountService) ac.getBean("accountService");
        //IAccountService as2 = (IAccountService) ac.getBean("accountService");
        //System.out.println(as);
        //IAccountDao adao = ac.getBean("accountDao", IAccountDao.class);
        //System.out.println(adao);
        //System.out.println(as == as2);
        as.saveAccount();
        ac.close();
    }
}

你可能感兴趣的:(#,Spring,java,spring,intellij-idea,注解开发,ioc)