当前位置: 首页 > article >正文

框架注解开发总结

注解开发

第一种定义bean

在Dao层

@component (组件)就是类似于

加名字就写上@component(“bookDao”)

还需要在resources文件里面的applicationContext.xml中配置

在这里插入图片描述

<context:component-san base-package=“com.itheima.dao.impl”/ >

在service层

@Component

service层和Dao层是有关联的,Dao层指向service层的聚集关系

在这里插入图片描述

在这里插入图片描述

ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
Book bookDao = (BookDao)ctx.getBean("bookDao");
System.out.println(bookDao);
BookService bookService ctx.getBean(BookService.class);
System.out.println(bookService);
//一个是按照名称访问一个是按照类访问(反射)

第二种纯注解开发

和Dao层和service层在同一个软件包下创建Config

在这里插入图片描述

并在里面创建配置类

import orgspringframework.context.annotation.Configuration
@Configuration
@ComponentSan("com.itheima")//指定文件进行扫描
public class SpringConfig{   
} 
ApplicationContext ctx = new AnnotationConfigApplicationContext(Spring.class)//加载配置类,我们把applicationContext.xml中的配置<bean>的方式变成注解的方式进行,在配置类中进行
Book bookDao = (BookDao)ctx.getBean("bookDao");
System.out.println(bookDao);
BookService bookService ctx.getBean(BookService.class);
System.out.println(bookService);

在这里插入图片描述

注解开发bean作用范围和生命周期

//在dao层
@Repository
@Scope("singleton")//非单例--prototype,单例--singleton
public class BookDaoImpl implements BookDao{
public void save(){
    System.out.println("book dao save...");
}
    @PostConstruct
    public void init(){//在构造方法后运行的方法
    System.out.println("init...");
}
    @PreDestory
    public void destory(){//彻底销毁前运行的方法
    System.out.println("destory...");
}
    
}

在这里插入图片描述

注解开发依赖注入

自动装配

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

@Service
public class BookServiceImpl implements BookService {

    @Qualifier("bookDaoImpl")//指定加载某一个bean
    @Autowired
    private BookDao bookDao;
    
    /*public void setBookDao(BookDao bookDao){
        this.bookDao = bookDao;
    }*/
    
    
    public void save()
    {
        System.out.println("book service save ...333");
        bookDao.save();
    }
}
//注意:自动装配基于反射设计创建对象并暴力反射对应属性为私有属性初始化数据。因此无需提供setter方法
//注意:自动装配建议使用无参构造方法创建对象(默认),如果不提供对应构造方法,请提供唯一的构造方法

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

@Repository
public class BookDaoImpl implements BookDao{
    @Value("100")
    private String name;
    public void save(){
        System.out.println("book dao save ..."+name);
    }
}

使用外部的resources/xxx.properties文件中的内容

在这里插入图片描述

需要在config配置包中对SpringConfig文件进行配置

@Configuration
@ComponentScan(basePackages = "org.example")
@PropertySource("classpath:jdbc.properties")
public class Spingconfig {
}

注意:路径仅支持单一文件配置,多文件请使用数组格式配置,不允许使用通配符*

第三方bean管理,第三方bean依赖注入

使用@Bean配置第三方bean
public class JdbcConfig {
    @Bean
    public DataSource dataSource(){
        DruidDataSource ds=new DruidDataSource();
        ds.setDriverClassName("com.mysql.jdbc.Driver");
        ds.setUrl("jdbc:mysql://localhost:3306/spring_db");
        ds.setUsername("root");
        ds.setPassword("123456");
        return ds;
    }
}

将独立的配置类加入核心类配置

方式一:导入式
public class JdbcConfig {
    @Bean
    public DataSource dataSource(){
        DruidDataSource ds=new DruidDataSource();
        ds.setDriverClassName("com.mysql.jdbc.Driver");
        ds.setUrl("jdbc:mysql://localhost:3306/spring_db");
        ds.setUsername("root");
        ds.setPassword("123456");
        return ds;
    }
}


//使用@Import注解手动加入配置类到核心配置,此注解只能添加依次,多个数据请用数组格式
@Configuration
//@ComponentScan(basePackages = "org.example.config")
@Import({JdbcConfig.class})
public class SpringConfig {

}
第二个方式:扫描式
@Configuration
public class JdbcConfig {
    @Bean
    public DataSource dataSource(){
        DruidDataSource ds=new DruidDataSource();
        ds.setDriverClassName("com.mysql.jdbc.Driver");
        ds.setUrl("jdbc:mysql://localhost:3306/spring_db");
        ds.setUsername("root");
        ds.setPassword("123456");
        return ds;
    }
}
//使用@ComponentScan注解扫描配置类所在的包,加载对应的配置类信息
@Configuration
@ComponentScan(basePackages = "org.example.config")
public class SpringConfig {

}
第三方bean依赖注入
简单类型依赖注入
public class JdbcConfig {
    @Value("com.mysql.jdbc.Driver")
    private String driver;
    @Value("jdbc:mysql://localhost:3306/spring_db")
    private String url;
    @Value("root")
    private String username;
    @Value("123456")
    private String password;
    @Bean
    public DataSource dataSource(){
        DruidDataSource ds=new DruidDataSource();
        ds.setDriverClassName(driver);
        ds.setUrl(url);
        ds.setUsername(username);
        ds.setPassword(password);
        return ds;
    }
}
引用类型依赖注入
public class JdbcConfig {
    @Value("com.mysql.jdbc.Driver")
    private String driver;
    @Value("jdbc:mysql://localhost:3306/spring_db")
    private String url;
    @Value("root")
    private String username;
    @Value("123456")
    private String password;
    @Bean
    public DataSource dataSource(BookDao bookDao){//形参注入
        System.out.println(bookDao);
        DruidDataSource ds=new DruidDataSource();
        ds.setDriverClassName(driver);
        ds.setUrl(url);
        ds.setUsername(username);
        ds.setPassword(password);
        return ds;
    }
}
//引用类型注入只需要为bean定义方法设置形参即可,容器会根据类型自动装配对象

XML配置对比注解配置

DruidDataSource ds=new DruidDataSource();
ds.setDriverClassName(driver);
ds.setUrl(url);
ds.setUsername(username);
ds.setPassword(password);
return ds;
}
}
//引用类型注入只需要为bean定义方法设置形参即可,容器会根据类型自动装配对象

XML配置对比注解配置

在这里插入图片描述


http://www.kler.cn/a/395101.html

相关文章:

  • 写给Pythoner的前端进阶指南(五):事件驱动模型
  • 0.96寸OLED显示屏详解
  • D102【python 接口自动化学习】- pytest进阶之fixture用法
  • C++ OpenGL学习笔记(4、绘制贴图纹理)
  • LAUNCHXL_F28379D_Workspace_CCS124
  • GOC编程 第2课 简单命令---直走和转弯命令
  • Electron教程1-初学入门
  • 使用源码编译安装 Tomcat
  • 网上商城开发:Spring Boot技术指南
  • 【uiautomator】自动化测试camera【一】
  • 【视觉SLAM】2-三维空间刚体运动的数学表示
  • 安全见闻-泷羽sec课程笔记
  • Mysql-DDL语句
  • Leetcode 968-监控二叉树
  • LVDS高速背板总线:打造分布式I/O高效数据传输新境界
  • SHA-256哈希函数
  • 国信证券造访图为科技,共探科技与资本交融新契机
  • 【2024软考架构案例题】你知道什么是 RESTful 风格吗?
  • python-有关等差数列的基础知识
  • Unity图形学之Shader2.0 Blurning
  • 《深度学习》VGG网络
  • 【算法】区间DP
  • A3超级计算机虚拟机,为大型语言模型LLM和AIGC提供强大算力支持
  • King3399(ubuntu文件系统)wifi设备树分析
  • 学习日志009--面向对象的编程
  • 前后端、网关、协议方面补充