• java从入门到精通二十八(Spring注解开发)


    从注解开发开始,这里的一切都变得十分简化。
    包括后面的大量开发实战,我们的注解开发都会派上大的用处。

    注解设置bean

    那么我们的bean就不再xml文件里面进行定义了。具体怎么做呢?

    我们可以这样举个例子。先创建一个接口,放在dao层,然后创建sevice包,在这里我们创建接口service继承dao,然后在改包下创建impl,里面创建类来实现sevice接口类。

    在这里插入图片描述
    具体如下

    package com.jgdabc.dao;
    
    public interface Bookdao {
        void save();
    
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    package com.jgdabc.service;
    
    import com.jgdabc.dao.Bookdao;
    
    public interface BookService extends Bookdao {
        @Override
        void save();
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    package com.jgdabc.service.impl;
    
    import com.jgdabc.service.BookService;
    
    public class BookDaoServiceImp implements BookService {
        @Override
        public void save() {
    
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    我们然后这样操作这个实现类

    package com.jgdabc.service.impl;
    
    import com.jgdabc.dao.Bookdao;
    import com.jgdabc.service.BookService;
    import org.springframework.stereotype.Component;
    
    @Component("bookDao")
    public class BookDaoServiceImp implements BookService {
    
    
        @Override
        public void save() {
            System.out.println("bookdaoservice impl is runnning");
    
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    非常重要的一件事,在BookDaoImpl类上添加@Component 注解。到底是什么用处呢?
    例如这样,我们上面的代码与此类似
    在这里插入图片描述

    然后呢,我们还是需要去spring 的配置文件配置一下。你要开启包扫描

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:context="http://www.springframework.org/schema/context"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"
           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 http://www.springframework.org/schema/aop https://www.springframework.org/schema/aop/spring-aop.xsd">
    
    
        <!--    bean标签表示配置配置bean-->
        <!--    id属性表示给bean起名字-->
        <!--    class属性表示给bean定义类型-->
        <!--    context是我开启的新的命名空间-->
        <!--  在xml文件配置了<context:component-scan>标签后,
        spring容器可以自动去扫描base-pack所指定的包或其子包下面的java类文件,
        如果扫描到有@Component、@Controller、@Service 、@Repository等注解修饰的Java类,
        则将这些类注册为spring容器中的bean。
          -->
      <context:component-scan base-package="com.jgdabc">
    
      </context:component-scan>
    </beans>
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    然后运行
    在这里插入图片描述

    但是包括包扫描,开启命名空间,其实都需要在配置文件上添加配置,比较容易出现错误。我们后面可以将配置文件也按照注解开发。

    component-scan
    component:组件,Spring将管理的bean视作自己的一个组件scan:扫描
    base-package指定Spring框架扫描的包路径,它会扫描指定包及其子包中的所有类上的注解。包路径越多[如:com.jgdabc.dao.impl],扫描的范围越小速度越快
    包路径越少[如:com.jgdabc],扫描的范围越大速度越慢
    一般扫描到项目的组织名称即Maven的groupId下[如:com.jgdabc]即可。

    注意

    @Component注解如果不起名称,会有一个默认值就是当前类名首字母小写,所以也可以按照名称获取

    对于@Component注解,还衍生出了其他三个注解@Controller 、@Service 、@Repository

    这几个注解的功能是一样的,只是设定这样的名字便于我们区分具体功能。
    方便我们后期在编写类的时候能很好的区分出这个类是属于表现层、业务层还是数据层的类。

    注解改造spring配置文件

    首先将原来的配置文件删掉。因为实在太麻烦。或者你可以注销掉。我们使用注解的方式。
    在这里插入图片描述

    这样这个之前的配置文件就不会再起作用了。

    在这里插入图片描述
    然后我们创建一个config的目录。下面创建配置类。

    在这里插入图片描述
    难道你创建一个配置类,spring就会认为你这个类就是它的配置类?不会的。

    我们用注解告诉他
    在这里插入图片描述

    上次我们用的是再xml配置扫描,现在我们用注解扫描bean。
    在这里插入图片描述
    现在我们运行App测试类,照样也可以运行出来。这个就真的方便太多了。

    在这里插入图片描述

    总结以上的过程

    在这里插入图片描述
    注解扫描的话,可以扫描多级。需要这样去写,举个例子
    在这里插入图片描述
    之前我们读取配置方式改一下

    import com.jgdabc.config.SpringConfig;
    import com.jgdabc.dao.Bookdao;
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.annotation.AnnotationConfigApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    
    public class App {
        public static void main(String[] args) {
    //        ApplicationContext ctx = new ClassPathXmlApplicationContext("SpringConfig.xml.bak");
    //        DataSource dataSource = (DataSource) ctx.getBean("dataSource");
    //        System.out.println(dataSource);
    //        DataSource dataSource01= (DataSource) ctx.getBean("datasource01");
    //        System.out.println(dataSource01);
            AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(SpringConfig.class);
            
            Bookdao bookDao = (Bookdao) ctx.getBean("bookDao");
           bookDao.save();
    
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    起步就这么简单。

    未完续更。

  • 相关阅读:
    去中心化身份DID(研究)
    C陷阱与缺陷 第7章 可移植性缺陷 7.9 大小写转换
    五年!!专科学历让我懂得了互联网
    对原数组有影响的几个方法
    【后量子密码】CRYSTALS-KYBER 算法(二):密钥封装 KEM(附源码分析)
    关于Jupyter markdown的使用
    luffy-(2)
    [山东科技大学OJ]1214 Problem B: 编写函数:字符串的连接 之二 (Append Code)
    视觉神经网络芯片是什么,视觉神经网络芯片设计
    二十四节气之处暑
  • 原文地址:https://blog.csdn.net/jgdabc/article/details/125420273