Spring—注解开发

注入bean的方式

如果使用注解的前提:

  1. 在配置文件中添加component-scan
<context:component-scan base-package="需要扫描包的范围"/>
  1. 在配置类中添加@ComponentScan(“扫描的路径”)

    //表示这个是一个配置类
    @Configuration
    //扫描包,只有扫描了包才可以使用纯注解开发
    @ComponentScan("com.itheima")
    //扫描类路径下面的properties文件
    @PropertySource("school.properties")
    @Import(StudentFactory.class)
    public class SpringConfig {}
    

写在类上面

  1. @Component

  2. @Service->代表Service层

  3. @Controller->代表是控制层

  4. @Repository

写在方法上

  1. @Bean -如果不是写在配置类中,需要使用上面的4个注解中的其中一个

    此注解一般是用来加载第三方提供的配置。

import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;@Component
public class StudentFactory {@Bean("getStudent")public Student getStudent(){return  new Student();}
}

属性注入

  1. @Value(“值”)-普通属性使用这种方式

  2. @Autowired-引用类型使用此方式自动状态

    1. 先按照类型进行匹配,如果有多个相同的类型,则按照成员变量名进行匹配

3.@Qualifier(“注入名”) 这个标签是和@Autowried一起使用

提高类的加载优先级别

  • @Primary 如果有两个类实现了同一个接口,可以指定其中一个类的加载优先级@Primary,但是这个注解只能在一个类上使用,不能出现在多个类上

加载properties文件

  • @PropertySource(“指定文件路径”)

    PropertySource("classpath:school.properties")
    
  • @PropertySource({“路径”,“路径”})如果需要读取多个配置文件

    @PropertySource({"classpath:school.properties","classpath:jdbc.properties"})
    

控制Bean的加载

  • ​ @DependsOn
  1. 类上

    @DependsOn(“另一个类名”)->使用这个注解的Bean会比指定的Bean先加载到容器中。

    应用场景:当A类依赖B类时,可以在B类上使用这个注解,B类就会比A类优先加载。

  2. 方法上

    同上,在同一个类中。当A方法依赖B方法时,可以在B方法上使用这个注解,B方法就会比A方法优先加载。

  • @Orde 配置类的加载顺序

在加载构造方法中指定加载顺序也是一样的

  • @Lazy延迟加载

    • 可以在再方法上
    • 也可以写在类上

    需要的时候才进行加载,不需要的时候不进行加载

用注解整合Mybaits

流程

  1. JDBCConfig类,配置数据库的链接信息

    //配置JDBC的DataSource
    @Component
    @PropertySource("jdbc.properties")
    public class JDBCConfig {//使用配置文件赋值@Value("${jdbc.driver}")private String driver;@Value("${jdbc.url}")private String url;@Value("${jdbc.username}")private String userName;@Value("${jdbc.password}")private String password;@Bean()public DataSource getDataSource(){DruidDataSource ds = new DruidDataSource();//设置数据库的驱动ds.setDriverClassName(driver);//设置urlds.setUrl(url);//设置用户名ds.setUsername(password);//设置密码ds.setPassword(password);//配好的DataSourcereturn ds;}}
    1. 配置Mybatis中的SqlSessionFactoryBean和映射配置文件
    @Component
    public class MybatisConfig {//配置SqlSessionFactoryBean@Bean//@Autowired DataSource dataSource 这里的参数就是由JDBCConfig中提供的public SqlSessionFactoryBean getSqlSessionFactoryBean(@Autowired DataSource dataSource){SqlSessionFactoryBean ssf = new SqlSessionFactoryBean();ssf.setDataSource(dataSource);return ssf;}//配置映射文件@Beanpublic MapperScannerConfigurer getMapperScannerConfigurer(){MapperScannerConfigurer msc = new MapperScannerConfigurer();//设置与映射配置文件扫描的路径,生成代理对象msc.setBasePackage("com.itheima");return msc;}
    }
    
    1. 导入MybatisCofig和JDBCConfig的类到配置类中
    
    //扫描注解
    @ComponentScan("com.itheima")
    //声明这是一个注解类
    @Configuration
    //可以读取properties内容
    @PropertySource("classpath:jdbc.properties")
    //导入其它JDBCConfig和Mybatis到配置中
    @Import({JDBCConfig.class, MybatisConfig.class})
    public class SpringConfig {}
    1. 配置Service的Bean到容器中
    @Service
    public class StudentServiceImp implements StudentService {//这个Dao的接口是由Mybatis中MapperScannerConfigurer实现的代理对象@Autowiredprivate StudentDao studentDao;@Overridepublic List<Student> findAll() {List<Student> all = studentDao.findAll();return all;}
    }
    
    1. 测试
    
    public class APP {public static void main(String[] args) {//读取核心配置文件ApplicationContext ctx = new AnnotationConfigApplicationContext(SpringConfig.class);//创建业务层StudentService bean = ctx.getBean(StudentServiceImp.class);//调用业务层的方法List<Student> all = bean.findAll();//打印结果System.out.println(all);}
    }

效果

自定义导入器(了解)

  1. 创建一个类实现ImportSelector接口

    public class MyImport implements ImportSelector {@Overridepublic String[] selectImports(AnnotationMetadata annotationMetadata) {return  new String[0];}
    }
  2. 并重写selectImports方法,返回的是一个String[]数组,数组里面的内容就是存放需要导入Bean的全路径

    1. 将需要导入的路径写到配置文件中
    path=com.itheima.dao.School,com.itheima.dao.Student,com.itheima.dao.Personimp
    

    ​ 2. 读取配置文件,将内容进行切分

    public class MyImport implements ImportSelector {@Overridepublic String[] selectImports(AnnotationMetadata annotationMetadata) {//读取类路径下面的import.properties文件ResourceBundle bundle=ResourceBundle.getBundle("import.properties");//此时得到的内容是:com.itheima.dao.School,com.itheima.dao.Student,com.itheima.dao.PersonimpString path = bundle.getString("path");//按逗号进行切割String[] split = path.split(",");return  new String[0];}
    }
    
  3. 配置类中的注解@Import(“指定自己的导入器类”)

    //表示这个是一个配置类
    @Configuration
    //指定自己的导入器Class对象
    @Import(MyImport.class)
    public class SpringConfig {}
  4. 测试

    public class StudentTest {public static void main(String[] args) {ApplicationContext ctx = new AnnotationConfigApplicationContext(SpringConfig.class);School bean = ctx.getBean(School.class);System.out.println(bean);}
    }
  5. 效果

st {
public static void main(String[] args) {
ApplicationContext ctx = new AnnotationConfigApplicationContext(SpringConfig.class);
School bean = ctx.getBean(School.class);
System.out.println(bean);
}
}

5. 效果[外链图片转存中...(img-gptkdvqv-1595504237133)]

Sprin_使用注解进行属性注入和整合Mybatis相关推荐

  1. Spring学习笔记(二)——Spring相关配置属性注入Junit整合

    一.Spring的相关配置 1.1 Bean元素 class属性:被管理对象的完整类名 name属性:给Bean起个名字,能重复,能使用特殊字符.后来属性 id属性:给Bean起个名字,不能重复,不能 ...

  2. Spring~用注解读取bean(属性注入、构造方法注入、set注入)

    文章目录 注解@Autowired. 属性注入 Setter注入 构造方法注入 三种注入的优缺点 注解@Resource. 1.属性注入 2.构造方法注入 @Resource与@Autowired区别 ...

  3. Java Spring-注解进行属性注入

    2017-11-06 21:19:43 一.Spring的注解装配Bean Spring2.5 引入使用注解去定义Bean @Component 描述Spring框架中Bean Spring的框架中提 ...

  4. Spring整合Mybatis注解方式

    Spring整合Mybatis(注解方式) 目录 Spring整合Mybatis(注解方式) 环境准备 纯注解方式 配置类具体内容 测试类具体内容 环境准备 jar包: Spring所需依赖:spri ...

  5. AOP和整合mybatis

    1.代理模式 代理模式是spring AOP的底层! 代理模式的分类 静态代理 动态代理 1.1静态代理 角色分析: 抽象角色:一般会使用接口或者抽象类来解决 真实角色:被代理的角色 代理角色:代理真 ...

  6. Spring Boot整合MyBatis

    最近项目原因可能会继续开始使用MyBatis,已经习惯于spring-data的风格,再回头看xml的映射配置总觉得不是特别舒服,接口定义与映射离散在不同文件中,使得阅读起来并不是特别方便. Spri ...

  7. 2.3.3 spring属性注入-注解注入-全注解-配置类扫描

    代码: spring2-属性注入-全注解-配置类扫描.zip - 蓝奏云文件大小:12.3 K|https://www.lanzouw.com/iPK5vvq21uf 这个博客,我们使用全注解的方式来 ...

  8. 2.3.2 spring属性注入-注解注入-半注解注入-后序

    代码: spring属性注入-注解注入-半注解后序.zip - 蓝奏云文件大小:15.2 K|https://www.lanzouw.com/iCjbVvpvxaf 上一个博客的半注解是,一个类在xm ...

  9. 2.3.1 spring属性注入-注解注入-半注解方式-前序

    注解注入自由度高,可以对部分类使用注解,也可以对所有类都使用注解. 下面代码是的Category使用xml定义java Bean, Product使用注解来定义java Bean 1.定义Catogo ...

最新文章

  1. JS 实现MVC的写法
  2. 关于CLR、CIL、CTS、CLS、CLI、BCL和FCL
  3. kubernetes 配置kubedns
  4. Pycharm设置pylint real-time scan实时扫描代码规范
  5. Visual Tracking:运行ECO模型的GPU版本
  6. 具有Spring的简单工作流引擎
  7. 16岁高中生的「卷」,用13000+行代码,从头写了一个C++机器学习库
  8. 用户态 tcpdump 如何实现抓到内核网络包的?
  9. c语言自动选课,C语言实现简单学生选课管理系统
  10. win7旗舰版梦幻桌面高清视频下载
  11. TCP/IP报文格式及通讯
  12. excel批量删除密码解除密码保护 可多个密码
  13. tensorflow2 serving
  14. BLDC无刷直流电机
  15. LINQ:使用join进行联接
  16. 动态海报,一次 Computational Design 实验
  17. 机器学习四大数据降维方法详解
  18. html 卡片布局 怎么,卡片式格局(CardLayout)
  19. 网络协议上课笔记(三) 路由、重要概念、NAT
  20. Python基础课程-面向对象编程

热门文章

  1. CSS3 弹性布局 flex
  2. matlab 多个矩阵相乘,两矩阵相乘
  3. 如何关闭Eclipse的面包屑(breadcrumb)工具条
  4. Vijos 1028-魔族密码【暴力】
  5. lichee linux nfs,lichee开发板搭建nfs
  6. 机房布线,上走线、下走线,那个好?
  7. 存放在mysql数据库的表_下列选项中,存放在mysql数据库的表是
  8. 3分钟带你秒懂OA办公系统
  9. 同方计算机加入openKylin,助推社区生态完善
  10. 户外软件推荐与介绍——奥维和两步路