学习笔记12——Spring的注解配置

学习笔记系列开头惯例发布一些寻亲消息

链接:https://baobeihuijia.com/bbhj/contents/3/192486.html

SSM框架------注解配置(@Component + @Autowired + 加载SpringConfig)

  • 注解开发(Component注解、config扫描 + 加载SpringConfig)

    复制代码
    @Component("bookDao")
    可以按照名字或者类型找
    BookDao bookDao = ctx.getBean("bookDao");
    BookDao bookDao = ctx.getBean(BookDao.class);
    
    @Component
    只可以按照类型找到
    BookService bookService = ctx.getBean(BookService.class);
    
    # 扫描该包以及该包下所有子包的注解
    <context:component-scan base-package="com.ithema"/>
    • 三级注解

      • @Service
      • @Repository
      • @Controller
    • 用Config来替换applicationContext.xml容器

      复制代码
      //声明当前类为Spring配置类
      @Configuration
      //设置bean扫描路径,多个路径书写为字符串数组格式
      @ComponentScan({"com.itheima.service","com.itheima.dao"})
      public class SpringConfig {
      }
    • AnnotationConfigApplicationContext加载Spring配置类初始化Spring容器

    复制代码
      public class AppForAnnotation {
          public static void main(String[] args) {
              //AnnotationConfigApplicationContext加载Spring配置类初始化Spring容器
              ApplicationContext ctx = new AnnotationConfigApplicationContext(SpringConfig.class);
              BookDao bookDao = (BookDao) ctx.getBean("bookDao");
              System.out.println(bookDao);
              //按类型获取bean
              BookService bookService = ctx.getBean(BookService.class);
              System.out.println(bookService);
          }
      }
    • 控生命周期

    复制代码
      // 单例
      @Scope("prototype")
    
      // 控制生命周期
      @PostConstruct 构造方法后
      public void init(){
    
      }
    
      @PreDestory 彻底销毁前
      public void destory(){
    
      }
  • 依赖注入,自动装配:可以不写setter

    复制代码
    // 按照类型装配
    @Repository
    @Autowired
    
    //按照名字装配
    @Repository("bookDao2")
    
    @Autowired
    @Qualifier("bookDao2")
    
    // 简单类型注入,其中value的值可以由properits提供
    @Value("给一个值就行666")
    @Value("${name}")
    private String name;
    
    @Configuration
    @ComponentScan("com.itheima")
    
    //@PropertySource加载properties配置文件,不支持通配符
    @PropertySource({"jdbc.properties"})
    
    public class SpringConfig {
    }
  • 第三方管理(手写new代码)

    复制代码
    	添加@Bean,表示当前方法的返回值是一个bean
        //@Bean修饰的方法,形参根据类型自动装配
        @Bean
        public DataSource dataSource(){
            DruidDataSource ds = new DruidDataSource();
            ds.setDriverClassName(driver);
            ds.setUrl(url);
            ds.setUsername(userName);
            ds.setPassword(password);
            return ds;
        }
    
    一般将上述内容单独写一个JdbcConfig
    然后让spring config @Import("JdbcConfig");
    • 第三方管理的依赖注入,以形参自动装配

      // 简单类型
      @Value("com.mysql.jdbc.Driver")
      private String driver;

      // 引用类型
      @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;
      }

  • XML配置和注解配置的区别

    方面 XML配置 Spring Config注解配置
    Bean生成 后直接到Spring容器中 @Component/三种延申 需要@ComponentScan后才进入容器
    依赖注入 setter注入 <property name="" ref="" /> 构造器注入 @Autowired @Qualifer @Value
    第三方 当作bean对象,然后赋值proporeties属性 单独一个config文件 @Bean 后new需要的第三方对象 Spring config中需要import这个类
    声明周期 <bean id="bookDao" class="com.itheima.dao.impl.BookDaoImpl" init-method="init",destory-mewthod="destory"/> @PostConstruct 构造方法后 @PreDestory 彻底销毁前
    属性文件 <context:property-placeholder location="classpath*.properties" system-properties-mode="NEVER"/> @PropertSource("xxxxx)
    使用容器 ClassPathXmlApplicationContext ctx = new ApplicationContext ctx = new AnnotationConfigApplicationContext(SpringConfig.class);
相关推荐
im_AMBER15 分钟前
React 10
前端·javascript·笔记·学习·react.js·前端框架
LEEBELOVED18 分钟前
R语言高效数据处理-3个自定义函数笔记
开发语言·笔记·r语言
朝新_20 分钟前
【SpringMVC】SpringMVC 请求与响应全解析:从 Cookie/Session 到状态码、Header 配置
java·开发语言·笔记·springmvc·javaee
喜欢吃燃面29 分钟前
C++:红黑树
开发语言·c++·学习
兔兔爱学习兔兔爱学习32 分钟前
LangChain4j学习一:聊天和语言模型
人工智能·学习·语言模型
伞啊伞1 小时前
云计算学习(三)——子网划分
学习·云计算
wdfk_prog7 小时前
[Linux]学习笔记系列 -- [kernel][time]alarmtimer
linux·笔记·学习
小志biubiu7 小时前
【Linux】Ext系列文件系统
linux·服务器·c语言·经验分享·笔记·ubuntu·操作系统
charlie1145141917 小时前
现代 Python 学习笔记:Statements & Syntax
笔记·python·学习·教程·基础·现代python·python3.13
ha20428941947 小时前
Linux操作系统学习之---基于环形队列的生产者消费者模型(毛坯版)
linux·c++·学习