首页 > 其他分享 >跟着黑马学SSM——Day3之注解

跟着黑马学SSM——Day3之注解

时间:2022-09-04 15:23:03浏览次数:51  
标签:jdbc Day3 class SSM bean dataSource 注解 public

注解开发

纯注解开发

  • Spring3.0升级了纯注解开发模式,使用Java类代替配置文件,开启了Spring快速开发通道

  • Java类代替Spring核心配置文件

  • @Configuration注解用于设定当前类为配置类

  • @Component注解用于设定扫描路径,此注解只能添加一次,多个数据请用数组格式

    @ComponentScan({"com.xhj.dao","com.xhj.service"})
    
  • 读取Spring核心配置文件初始化容器对象切换为读取Java配置类初始化容器对象

    //加载配置文件初始化容器
    ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
    //加载配置类初始化容器
    ApplicationContext context = new AnnotationConfigApplicationContext(SpringConfig.class);
    

bean管理

bean生命周期

  • 使用@PostConstruct、@PreDestroy定义bean生命周期

    @Repository
    @Scope("singleton")
    public class BookDaoImpl implements BookDao{
        @Override
        public void save() {
            System.out.println("book dao save");
        }
        @PreDestroy
        public void destroy() throws Exception {
            System.out.println("die");
        }
        @PostConstruct
        public void afterPropertiesSet() throws Exception {
            System.out.println("begin");
        }
    }
    

依赖注入

自动装配

  • 使用@autowired注解开启自动装配模式(按类型)

    @Service
    public class BookServiceImpl implements BookService {
        @Autowired
        @Qualifier("bookDao")
        private BookDao bookDao;
    
        @Override
        public void save() {
            System.out.println("book service save...");
            bookDao.save();
        }
    }
    
  • 注意:自动装配基于反射设计创建对象并暴力反射对应属性为私有属性初始化数据,因此无需提供setter方法

  • 注意:自动装配建议使用无参构造方法创建对象(默认),如果不提供构造方法,请提供唯一的构造方法

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

    @Autowired
    @Qualifier("bookDao")
    private BookDao bookDao;
    
  • 注意:@Qualifier注解无法单独使用,必须配合@Autowired注解使用

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

  • 使用@PropertySource注解加载properties文件

    @Configuration
    @ComponentScan("com.xhj")
    @PropertySource("jdbc.properties")
    public class SpringConfig {
    }
    
  • 注意:路径仅支持单一文件配置,多文件请使用数组格式配置,不允许使用通配符*

第三方bean管理

  • 使用@Bean配置第三方bean

    /*定义一个方法获得要管理的对象
     * 添加@Bean,表示当前方法的返回值是一个bean*/
    @Bean
    public DataSource dataSource(){
        DruidDataSource dataSource = new DruidDataSource();
        dataSource.setDriverClassName("com.mysql.jdbc.Driver");
        dataSource.setUrl("jdbc:mysql://localhost:3305/ssmbuild");
        dataSource.setName("root");
        dataSource.setPassword("00000");
        return dataSource;
    }
    
  • 使用独立的配置类管理第三方bean

    public class JdbcConfig {
        /*定义一个方法获得要管理的对象
         * 添加@Bean,表示当前方法的返回值是一个bean*/
        @Bean
        public DataSource dataSource(){
            DruidDataSource dataSource = new DruidDataSource();
            dataSource.setDriverClassName("com.mysql.jdbc.Driver");
            dataSource.setUrl("jdbc:mysql://localhost:3305/ssmbuild");
            dataSource.setName("root");
            dataSource.setPassword("00000");
            return dataSource;
        }
    }
    
  • 将独立的配置类加入核心配置

  • 方式一:导入式,使用@Import注解手动加入配置类到核心配置,此注解只能添加一次,多个数据请用数组格式

    @Configuration
    @Import({JdbcConfig.class})
    public class SpringConfig {
    
    }
    
  • 方式二:扫描式(不推荐),使用@ComponentScan注解扫描配置类所在的包,加载对应的配置类信息(配置类信息也得加@Configuration注解,不然无效)。

第三方bean依赖注入

  • 简单类型依赖注入

    @Value("com.mysql.jdbc.Driver")
    private String driver;
    @Value("jdbc:mysql://localhost:3305/ssmbuild")
    private String url;
    @Value("root")
    private String name;
    @Value("00000")
    private String pwd;
    
  • 引用类型依赖注入

    @Bean
    public DataSource dataSource(BookDao bookDao){
        bookDao.save();
        DruidDataSource dataSource = new DruidDataSource();
        dataSource.setDriverClassName(driver);
        dataSource.setUrl(url);
        dataSource.setName(name);
        dataSource.setPassword(pwd);
        return dataSource;
    }
    
  • 引用类型注入只需要为bean定义方法设置形参即可,容器会根据类型自动装配对象

注解开发总结

XMl配置与注解配置比较

image-20220903152654249

Spring整合MyBatis

  • MyBatis程序核心对象分析

    //1.创建SqlSessionFactoryBuilder对象                         初始化SqlSessionFactory
    SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
    //2.加载SqlMapConfig.xml配置文件
    InputStream inputStream = Resources.getResourceAsStream("SqlMapConfig.xml");
    //3.创建SqlSessionFactory对象,核心对象
    SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(inputStream);
    /*------------------------------------------------------------------------------*/
    //4.获取SqlSession                                            获取连接,获取实现
    SqlSession sqlSession = sqlSessionFactory.openSession();
    //5.执行SqlSession对象执行查询,获取结果User
    AccountDao mapper = sqlSession.getMapper(AccountDao.class);
    /*------------------------------------------------------------------------------*/
    Account byId = mapper.findById(2);                           //获取数据层接口
    System.out.println(byId);
    /*------------------------------------------------------------------------------*/
    //7.关闭资源                                                      关闭连接
    sqlSession.close();
    
  • 整合MyBatis

    <configuration>
        <properties resource="jdbc.properties"></properties><!--初始化属性数据-->
    <!------------------------------------------------------------------------------->
        <typeAliases>
            <package name="com.xhj.domain"/>                <!--初始化类型别名-->
        </typeAliases>
    <!------------------------------------------------------------------------------->
        <environments default="development">				<!--初始化dataSource-->
            <environment id="development">
                <transactionManager type="JDBC"/>
                <dataSource type="POOLED">
                    <property name="driver" value="${driver}"/>
                    <property name="url" value="${url}"/>
                    <property name="username" value="${username}"/>
                    <property name="password" value="${password}"/>
                </dataSource>
            </environment>
        </environments>
    <!------------------------------------------------------------------------------->
        <mappers>											<!--初始化映射位置-->
            <package name="com.xhj.dao"></package>
        </mappers>
    </configuration>
    

注解版

  • JdbcConfig.class

    public class JdbcConfig {
        @Value("${jdbc.driver}")
        private String driver;
        @Value("${jdbc.url}")
        private String url;
        @Value("${jdbc.username}")
        private String name;
        @Value("${jdbc.password}")
        private String pwd;
        @Bean
        public DataSource dataSource(){
            /*DriverManagerDataSource dataSource= new DriverManagerDataSource();*/
            DruidDataSource dataSource = new DruidDataSource();
            dataSource.setDriverClassName(driver);
            dataSource.setUrl(url);
            dataSource.setUsername(name);
            dataSource.setPassword(pwd);
            return dataSource;
        }
    }
    
  • MybatisConfig.class

    public class MybatisConfig {
    
        @Bean
        public SqlSessionFactoryBean sqlSessionFactoryBean(DataSource dataSource){
            SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
            sqlSessionFactoryBean.setTypeAliasesPackage("com.xhj.domain");
            sqlSessionFactoryBean.setDataSource(dataSource);
            return sqlSessionFactoryBean;
        }
        @Bean
        public MapperScannerConfigurer mapperScannerConfigurer(){
            MapperScannerConfigurer mapperScannerConfigurer = new MapperScannerConfigurer();
            mapperScannerConfigurer.setBasePackage("com.xhj.dao");
            return mapperScannerConfigurer;
        }
    }
    
  • SpringConfig.class

    @Configuration
    @ComponentScan("com.xhj")
    @PropertySource("classpath:jdbc.properties")
    @Import({JdbcConfig.class,MybatisConfig.class})
    public class SpringConfig {
    }
    

整合Junit

  • 导入依赖(统一所有spring依赖的版本!!!

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-test</artifactId>
        <version>5.3.12</version>
    </dependency>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.13.2</version>
        <scope>test</scope>
    </dependency>
    
  • 测试类代码

    //设定类运行器
    @RunWith(SpringJUnit4ClassRunner.class)
    //上下文配置
    @ContextConfiguration(classes = SpringConfig.class)
    public class AppTest {
        @Autowired
        private AccountService accountService;
    
        @Test
        public void findById() {
            System.out.println(accountService.findById(1));
        }
    }
    

标签:jdbc,Day3,class,SSM,bean,dataSource,注解,public
From: https://www.cnblogs.com/ltom/p/16655167.html

相关文章

  • Day37File
    File类的作用?创建对象定位文件,可以删除、获取文件信息等,但不能读写文件内容。File类构建对象的方式?Filefile=newFile("文件/文件/绝对路径/相对路径");绝对路径和相......
  • CSS Glassmorphism 按钮悬停效果
    CSSGlassmorphism按钮悬停效果CSSGlassmorphism按钮悬停效果免费下载在HTML和CSS中HTML:<head><metacharset="UTF-8"><metahttp-equiv="X-UA-Compat......
  • 16.普通参数与基本注解
    1注解:@PathVariable、 restful风格的参数@RequestHeader、  请求头中的参数@ModelAttribute、 运用在参数上,会将客户端传递过来的参数按名称注入到指定对......
  • day31-线程基础01
    线程基础011.程序进程线程程序(program):是为完成的特定任务,用某种语言编写的一组指令的集合。简单来说,就是我们写的代码。进程:进程是指运行中的程序,比如我们使用......
  • spring中@Transactional注解的作用,使用场景举例
    一,spring中管理事务一般使用@Transactional注解,下面对@Transactional使用的各个场景做一个列举,尽可能的将所有场景罗列出来1,场景一,最常见的用法,在方法上使用@Transactio......
  • @Transactional注解详细用法
    概述事务管理对于企业应用来说是至关重要的,即使出现异常情况,它也可以保证数据的一致性。SpringFramework对事务管理提供了一致的抽象,其特点如下:为不同的事务API提供一......
  • java 用反射获取自定义注解的信息实例
    最近看了些spring的源码,回来重新看一下反射和注解的一些文档,写了一个小例子,记录一下。packagecom.wbk.annotation;importjava.lang.annotation.*;importjava.lang.refle......
  • 如何使用 CSS 和 HTML 创建 Glassmorphism 效果
    如何使用CSS和HTML创建Glassmorphism效果Glassmorphism效果在现代网页设计中越来越流行Glasmorphism是一个有点新的功能,它一直在流行,并且经常在新设计的网站上受......
  • 跟着黑马学SSM——Day2之Bean
    依赖注入方式思考:向一个类中传递数据的方式有几种?普通方法(set方法)构造方法思考:依赖注入描述了在容器种建立bean与bean之间依赖关系的过程,如果bean运行需要的是数字......
  • SSM整合
    SSM整合环境要求环境:IDEAMySQL5.7.19Tomcat9Maven3.6要求:需要熟练掌握MySQL数据库,Spring,JavaWeb及MyBatis知识,简单的前端知识;数据库环境创建一个......