ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2022-09-04 15:34:11  阅读:207  来源: 互联网

标签: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
来源: https://www.cnblogs.com/ltom/p/16655167.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有