Spring 入门--spring注解开发

spring注解开发

1 注解开发定义bean

提前创建好了一个项目

1.1 简化配置文件

  1. 不想每次都配置文件,就在是实现类上添加注解 @Component(“bookDao”) 后面是id
package com.demo.dao.impl;

import com.demo.dao.BookDao;
import org.springframework.stereotype.Component;


@Component("bookDao")
public class BookDaoImpl implements BookDao {
    
    
    @Override
    public void test() {
    
    
        System.out.println("BookDao is running...");
    }
}
  1. 配置文件中不在配置bean,而是指定扫描哪一个位置的文件
<!--    <bean id="bookDao" class="com.demo.dao.impl.BookDaoImpl"/>-->
<context:component-scan base-package="com.demo.dao.impl"/>

2 纯注解开发模式

写一个类代替配置文件,并且为其加上配置的注解Configuration

image-20220813093335038

添加扫描包的注解,以及包的路径

image-20220813093513876

使用新的启动类

package com.demo;


import com.demo.configer.SpringConfig;
import com.demo.dao.BookDao;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;

public class App2 {
    
    
    public static void main(String[] args) {
    
    
        ApplicationContext applicationContext=new AnnotationConfigApplicationContext(SpringConfig.class);
        BookDao bookDao = (BookDao) applicationContext.getBean("bookDao");
        bookDao.test();
    }
}

3 bean的管理

3.1 bean的作用范围

只需要添加一个注解改变是否为单例

image-20220813094302860

3.2 生命周期

只要添加对应的注解区分初始化函数 @PostConstruct 与销毁函数 @PreDestroy

image-20220813094441971

4 依赖注入

自动装配

引用类型

使用注解@Autowired 自动装配对象

@Autowired
private BookDao bookDao;

这样以后可以不再使用set方法了

注意

如果有多个对象,就不能使用类型装配,得使用名称装配

简单类型

使用@Value注解

image-20220813103141782

外部文件加载进来

首先创建好一个jdbc.properties

然后使用注解引入外部文件

image-20220813103757166

使用的时候,用 $ 加{}的形式,引用

image-20220813103935231

5 管理第三方bean

  1. 定义一个方法获得要管理的对象
package com.demo.config;

import com.alibaba.druid.pool.DruidDataSource;
import org.springframework.context.annotation.Configuration;

import javax.sql.DataSource;

@Configuration
public class SpringConfig {
    
    
//    1.定义一个方法获得要管理的对象
    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;
    }
}
  1. 添加@Bean ,表示当前方法的返回值是一个bean
package com.demo.config;

import com.alibaba.druid.pool.DruidDataSource;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import javax.sql.DataSource;

@Configuration
public class SpringConfig {
    
    
//    1.定义一个方法获得要管理的对象
    @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;
    }
}
  1. 设置启动项,查看是否获得相应的信息。使用类型引用的方法
package com.demo;

import com.demo.config.SpringConfig;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;

import javax.sql.DataSource;

public class App {
    
    
    public static void main(String[] args) {
    
    
        AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(SpringConfig.class);
        DataSource dataSource = applicationContext.getBean(DataSource.class);
        System.out.println(dataSource);
    }
}

将这个类放到专门的jdbc类里面

方法一

  1. 新建一个类

  2. 给其添加上配置的注解

    package com.demo.config;
    
    import com.alibaba.druid.pool.DruidDataSource;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    
    import javax.sql.DataSource;
    
    
    @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;
        }
    }
    
  3. 在配置类里加上扫描jdbc类的注解

    package com.demo.config;
    
    import org.springframework.context.annotation.ComponentScan;
    import org.springframework.context.annotation.Configuration;
    
    @Configuration
    @ComponentScan("com.demo.config")
    public class SpringConfig {
           
           
    }
    

方法二

  1. 新建一个类

    package com.demo.config;
    
    import com.alibaba.druid.pool.DruidDataSource;
    import org.springframework.context.annotation.Bean;
    
    import javax.sql.DataSource;
    
    
    
    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;
        }
    }
    
  2. 在配置类里导入这个新建的类

    package com.demo.config;
    
    import org.springframework.context.annotation.ComponentScan;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.context.annotation.Import;
    
    @Configuration
    @Import(jdbcConfig.class)
    public class SpringConfig {
           
           
    }
    

6 总结

Xml配置对比注解配置

image-20220813170354147

猜你喜欢

转载自blog.csdn.net/qq_45842943/article/details/126321759