spring注解驱动开发(一)

这篇具有很好参考价值的文章主要介绍了spring注解驱动开发(一)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Spring常用注解(绝对经典)

1、需要导入的spring框架的依赖
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>4.3.12.RELEASE</version>
    </dependency>
2、@Configuration

设置类为配置类

3、AnnotationConfigApplicationContext
  • 通过配置类获取上下文环境applicationContext
  • 可以通过getBeanDefinitionNames()获得配置类中配置的各类Bean
  • 也可以使用getBeanNamesForType()通过类型来获得bean的name(id)
AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(MainConfig.class);
    String[] beanDefinitionNames = applicationContext.getBeanDefinitionNames();
    for (String str : beanDefinitionNames) {
      System.out.println(str);
    }
4、@Bean
  • 注册一个javaBean
  • 默认用方法名作为Bean的id
  • 使用AnnotationConfigApplicationContext的实例 通过getBean来获得这个Bean
@Configuration
@ComponentScan(value = "com.atguigu")
public class MainConfig {
  @Bean
  public Person person(){
    return new Person("lisi",20);
  }
}
AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(MainConfig.class);
    Person bean = applicationContext.getBean(Person.class);
    System.out.println(bean);
5、@ComponentScan

为配置类开启组件扫描

  • 放在配置类的上方,指定扫描的包路径如
@ComponentScan(value = "com.atguigu")
  • 还可以使用excludeFilter来设置类扫描规则如包含、排除,excludeFilter需要设置为一个数组
    排除
    包含使用excludeFilter,并为其设置一个过滤数组,来指定需要过滤掉那些组件
@Configuration
@ComponentScan(value = "com.atguigu",excludeFilters = {@ComponentScan.Filter(type = FilterType.ANNOTATION,
        classes ={Controller.class,Service.class} )
})
public class MainConfig {
  @Bean
  public Person person(){
    return new Person("lisi",20);
  }
}

包含
包含使用includeFilter,包含里面需要设置使用默认规则为false

@Configuration
@ComponentScan(value = "com.atguigu",includeFilters = {@ComponentScan.Filter(type = FilterType.ANNOTATION,
        classes ={Controller.class,Service.class} )},useDefaultFilters = false)
public class MainConfig {
  @Bean
  public Person person(){
    return new Person("lisi",20);
  }
}

还可以设置按给定类型过滤

@Configuration
@ComponentScan(value = "com.atguigu",includeFilters = {
        @ComponentScan.Filter(type = FilterType.ANNOTATION,
                classes ={Controller.class,Service.class}),
        @ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE,
                classes ={BookService.class})
},useDefaultFilters = false)
public class MainConfig {
  @Bean
  public Person person(){
    return new Person("lisi",20);
  }
}

其他可以设置的过滤方式还可以有:

  • 使用FilterType.ASPECTJ按照ASPECTJ表达式
  • 使用FilterType.REGEX按照REGEX正则表达式
  • 使用FilterType.CUSTOM按照自定义规则过滤(需要实现TypeFilter接口)

自定义过滤规则

public class MyTypeFilter implements TypeFilter {
  /*
  metadataReader:读取到的当前正在扫描的类的信息
  metadataReaderFactory:可以获取到其他任何类的信息
   */

  @Override
  public boolean match(MetadataReader metadataReader, MetadataReaderFactory metadataReaderFactory) throws IOException {
    //获取当前类的注解信息
    AnnotationMetadata annotationMetadata = metadataReader.getAnnotationMetadata();
    //获取当前正在扫描的类的类信息
    ClassMetadata classMetadata = metadataReader.getClassMetadata();
    //获取当前类的资源(类的路径)
    Resource resource = metadataReader.getResource();
    String className = classMetadata.getClassName();
    System.out.println(resource);
    System.out.println(className);
     if(className.contains("er")){
      return true;
    }
    return false;
  }
}

设置自定义规则

@Configuration
@ComponentScan(value = "com.atguigu",includeFilters = {
        @ComponentScan.Filter(type = FilterType.CUSTOM,
                classes = {MyTypeFilter.class})
},useDefaultFilters = false)
public class MainConfig {
  @Bean
  public Person person(){
    return new Person("lisi",20);
  }
}

测试代码

@Test
  public void testbeans() {
    AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(MainConfig.class);
    String[] beanDefinitionNames = applicationContext.getBeanDefinitionNames();
    for (String str : beanDefinitionNames) {
      System.out.println(str);
    }
  }

测试结果

测试规则打印内容

file [/Users/human/Desktop/Project/05SpringMVC/spring-annotation/target/classes/com/atguigu/bean/Person.class]
com.atguigu.bean.Person
file [/Users/human/Desktop/Project/05SpringMVC/spring-annotation/target/classes/com/atguigu/config/MyTypeFilter.class]
com.atguigu.config.MyTypeFilter
file [/Users/human/Desktop/Project/05SpringMVC/spring-annotation/target/classes/com/atguigu/controller/BookController.class]
com.atguigu.controller.BookController
file [/Users/human/Desktop/Project/05SpringMVC/spring-annotation/target/classes/com/atguigu/dao/BookDAO.class]
com.atguigu.dao.BookDAO
file [/Users/human/Desktop/Project/05SpringMVC/spring-annotation/target/classes/com/atguigu/service/BookService.class]
com.atguigu.service.BookService
file [/Users/human/Desktop/Project/05SpringMVC/spring-annotation/target/classes/com/atguigu/test/MainTest.class]
com.atguigu.test.MainTest

测试类打印过滤结果

org.springframework.context.annotation.internalConfigurationAnnotationProcessor
org.springframework.context.annotation.internalAutowiredAnnotationProcessor
org.springframework.context.annotation.internalRequiredAnnotationProcessor
org.springframework.context.event.internalEventListenerProcessor
org.springframework.context.event.internalEventListenerFactory
mainConfig
person
myTypeFilter
bookController
bookService
6、@Controller

将类配置为Controller类

7、@Service

将类配置为service类

8、@Repository

将类配置为dao操作的类

9、@Component

将类配置为通用类组件

10、@Scope

调整bean的作用域范围,默认单实例,可以修改为多实例
Bean是默认单实例的,通过指明prototype(多实例)和singleton(单实例)属性指明是否单实例

  • prototype:多实例
  • singleton:单实例
  • request:同一次请求创建一个实例
  • session:同一个session创建一个实例
@Configuration
@ComponentScan(value = "com.atguigu")
public class MainConfig {
  //Bean是默认单实例的,通过指明prototype(多实例)和singleton(单实例)属性指明是是否单实例
  //prototype:多实例
  //singleton:单实例
  //request:同一次请求创建一个实例
  //session:同一个session创建一个实例
  @Scope("prototype")
  @Bean("person")//指定bean的自定义id
  public Person person(){
    return new Person("张三",20);
  }
}

测试

  @Test
  public void testbeans() {
    AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(MainConfig.class);
	Object bean1 = applicationContext.getBean("person");
	Object bean2 = applicationContext.getBean("person");
    System.out.println(bean1==bean2);
  }

测试结果为false

11、@Lazy懒加载

实例默认在容器创建时立即加载
使用@Lazy后,当需要创建实例时才被加载

  • 不使用懒加载
    实体类构造函数
  public Person(String name, Integer age) {
    System.out.println("给容器添加Person对象");

    this.name = name;
    this.age = age;
  }

测试代码

@Test
  public void testbeans() {
    AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(MainConfig.class);
    System.out.println("容器已创建完成");
    //没有获取类的代码,单实际上类的实例已经被加载进容器了
  }

测试结果

给容器添加Person对象
容器已创建完成
  • 使用懒加载
@Configuration
@ComponentScan(value = "com.atguigu")
public class MainConfig {
//  @Scope("prototype")
  @Lazy
  @Bean("person")//指定bean的自定义id
  public Person person(){

    return new Person("张三",20);
  }
}

测试代码

@Test
  public void testbeans() {
    AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(MainConfig.class);
    System.out.println("容器已创建完成");
    Object bean1 = applicationContext.getBean("person");//这一句出现后才加载Person类

  }

测试结果

给容器添加Person对象
容器已创建完成
12、@Conditional
  • 按一定条件注册bean,满足条件就给容器注册bean,否则不注入
  • 要作为自定义条件,需要创建自定义condition类,并要实现Condition接口,并实现match方法
  • conditional不仅可以标在方法上,还可以标记在类上
//判断是否是Linux系统的条件
//要作为自定义条件,要实现Condition接口,并实现match方法
//AnnotatedTypeMetadata:注释信息
public class LinuxCondition implements Condition {
  @Override
  public boolean matches(ConditionContext conditionContext, AnnotatedTypeMetadata annotatedTypeMetadata) {
    //判断linux洗洗
    ConfigurableListableBeanFactory beanFactory = conditionContext.getBeanFactory();
    //获取类加载器
    ClassLoader classLoader = conditionContext.getClassLoader();
    //获得当前环境信息
    Environment environment = conditionContext.getEnvironment();
    //获取到bean定义的注册类
    BeanDefinitionRegistry registry = conditionContext.getRegistry();

    String OSproperty = environment.getProperty("os.name");
    if (OSproperty.contains("Mac OS X")){
      return true;
    }

    return false;
  }
}

另一个自定义条件

public class WindowsCondition implements Condition {
  @Override
  public boolean matches(ConditionContext conditionContext, AnnotatedTypeMetadata annotatedTypeMetadata) {
    Environment environment = conditionContext.getEnvironment();
    //获取操作系统信息
    String OSproperty = environment.getProperty("os.name");
    if (OSproperty.contains("Window")){
      return true;
    }
    return false;
  }
}

配置类信息


@Configuration
@ComponentScan(value = "com.atguigu")
public class MainConfig {
//  @Scope("prototype")
  @Lazy
  @Bean("person")//指定bean的自定义id
  public Person person(){

    return new Person("张三",20);
  }

  @Conditional({WindowsCondition.class})
  @Bean("male")
  public Person personMale(){
    return new Person("lisi",33);
  }

  @Conditional({LinuxCondition.class})
  @Bean("female")
  public Person personFemale(){
    return new Person("wanger",23);
  }
}

测试类信息

@Test
  public void testBeans() {
    AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(MainConfig.class);

    //获取ioc容器的运行环境
    ConfigurableEnvironment environment=applicationContext.getEnvironment();
    //获取操作系统名称
    String property = environment.getProperty("os.name");
    System.out.println(property);

    String[] namesForType = applicationContext.getBeanNamesForType(Person.class);
    for (String name:namesForType) {
      System.out.println(name);
    }

  }

测试结果

Mac OS X
person
female
13、给IOC容器中注册组件的5种方法
  1. 包扫描+组件类上标注注解:(@Controller,@Service,@Repository,@Component)
  2. @Bean:导入第三方包的组件
  3. @Import:快速给容器导入一个组件
    1)@Import(要导入到容器的组件),容器中就会自动注册这个逐渐,id默认是全类名
    2)ImportSelector:返回需要导入的组件的全类名数组

4.使用ImportBeanDefinitionRegistrar
5.使用Spring提供的FactoryBean(工厂bean)注册组件
1)默认获得的是工厂bean调用getObject创建的对象
2)要获取工厂bean本身,需要给id前面加一个&标识

14、@Import 快速导入一个类

使用@Import快速为配置类导入一个bean类
可以同时导入多个bean类
需要再配置类上方书写

  • 创建被导入的bean类
public class Color {
}
public class Red {
}
  • 给配置类导入该类
@Configuration
@ComponentScan(value = "com.atguigu")
@Import({Color.class, Red.class})//在这里进行快速地导入,可以是数组形式
public class MainConfig {
//  @Scope("prototype")
  @Lazy
  @Bean("person")//指定bean的自定义id
  public Person person(){

    return new Person("张三",20);
  }

  @Conditional({WindowsCondition.class})
  @Bean("male")
  public Person personMale(){
    return new Person("lisi",33);
  }

  @Conditional({LinuxCondition.class})
  @Bean("female")
  public Person personFemale(){
    return new Person("wanger",23);
  }
}

测试类代码

 AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(MainConfig.class);

  @Test
  public void testImport(){
    printBeans(applicationContext);
  }

  private void printBeans(AnnotationConfigApplicationContext applicationContext){
    String[] beanDefinitionNames = applicationContext.getBeanDefinitionNames();
    for (String name:beanDefinitionNames) {
      System.out.println(name);
    }
  }

测试结果

org.springframework.context.annotation.internalConfigurationAnnotationProcessor
org.springframework.context.annotation.internalAutowiredAnnotationProcessor
org.springframework.context.annotation.internalRequiredAnnotationProcessor
org.springframework.context.event.internalEventListenerProcessor
org.springframework.context.event.internalEventListenerFactory
mainConfig
bookController
bookDAO
bookService
com.atguigu.bean.Color
com.atguigu.bean.Red
person
female
15、ImportSelector接口导入一个类
  • ImportSelector:返回需要导入的组件的全类名数组
  • 需要实现ImportSelector接口并改写selectImports方法

创建需要被导入的类

public class Blue {
}
public class Yellow {
}

创建自己的Import类

public class MyImportSelect implements ImportSelector {
  @Override
  public String[] selectImports(AnnotationMetadata annotationMetadata) {
    //返回值是要导入到容器中的组件全类名
    //annotationMetadata:注解信息
    return new String[]{"com.atguigu.bean.Blue", "com.atguigu.bean.Yellow"};
  }
}

在配置类中设置@Import导入的自定义类选择器

注意:@Import({Color.class, Red.class,MyImportSelect.class})

@Configuration
@ComponentScan(value = "com.atguigu")
@Import({Color.class, Red.class,MyImportSelect.class})
public class MainConfig {
//  @Scope("prototype")
  @Lazy
  @Bean("person")//指定bean的自定义id
  public Person person(){

    return new Person("张三",20);
  }

  @Conditional({WindowsCondition.class})
  @Bean("male")
  public Person personMale(){
    return new Person("lisi",33);
  }

  @Conditional({LinuxCondition.class})
  @Bean("female")
  public Person personFemale(){
    return new Person("wanger",23);
  }
}

测试代码

AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(MainConfig.class);

  @Test
  public void testImport(){
    printBeans(applicationContext);
  }

  private void printBeans(AnnotationConfigApplicationContext applicationContext){
    String[] beanDefinitionNames = applicationContext.getBeanDefinitionNames();
    for (String name:beanDefinitionNames) {
      System.out.println(name);
    }
  }

测试结果
Color,Red,Blue,Yellow都有了

org.springframework.context.annotation.internalConfigurationAnnotationProcessor
org.springframework.context.annotation.internalAutowiredAnnotationProcessor
org.springframework.context.annotation.internalRequiredAnnotationProcessor
org.springframework.context.event.internalEventListenerProcessor
org.springframework.context.event.internalEventListenerFactory
mainConfig
bookController
bookDAO
bookService
com.atguigu.bean.Color
com.atguigu.bean.Red
com.atguigu.bean.Blue
com.atguigu.bean.Yellow
person
female
16、使用ImportBeanDefinitionRegistrar接口导入类

自定义导入的类定义,需要实现ImportBeanDefinitionRegistrar接口,并重写 registerBeanDefinitions方法

创建一个需要被注入的类

public class RainBow {
}

创建自定义的注册类信息类

public class MyImportBeanDefinitionRegistrar implements ImportBeanDefinitionRegistrar {
  //annotationMetadata:当前类的注解信息
  //beanDefinitionRegistry:beanDefinition注册类
  //把所有需要添加到容器中的bean,调用beanDefinitionRegistry.registerBeanDefinition手动注册类
  @Override
  public void registerBeanDefinitions(AnnotationMetadata annotationMetadata, BeanDefinitionRegistry beanDefinitionRegistry) {
    boolean red = beanDefinitionRegistry.containsBeanDefinition("com.atguigu.bean.Red");//判断定义中是否有红色
    boolean blue = beanDefinitionRegistry.containsBeanDefinition("com.atguigu.bean.Blue");//判断定义中是否有蓝色
    if(red && blue){
      //指定bean名
      RootBeanDefinition rainbowDefinition = new RootBeanDefinition(RainBow.class);
      //注册了一个bean,并指定了一个类名(别名)
      beanDefinitionRegistry.registerBeanDefinition("rainbow", rainbowDefinition);
    }
  }
}

在配置类中进行配置
注意:@Import({Color.class, Red.class,MyImportSelect.class,MyImportBeanDefinitionRegistrar.class})

@Configuration
@ComponentScan(value = "com.atguigu")
@Import({Color.class, Red.class,MyImportSelect.class,MyImportBeanDefinitionRegistrar.class})
public class MainConfig {
//  @Scope("prototype")
  @Lazy
  @Bean("person")//指定bean的自定义id
  public Person person(){

    return new Person("张三",20);
  }

  @Conditional({WindowsCondition.class})
  @Bean("male")
  public Person personMale(){
    return new Person("lisi",33);
  }

  @Conditional({LinuxCondition.class})
  @Bean("female")
  public Person personFemale(){
    return new Person("wanger",23);
  }
}

测试类

 @Test
  public void testImport(){
    printBeans(applicationContext);
  }

  private void printBeans(AnnotationConfigApplicationContext applicationContext){
    String[] beanDefinitionNames = applicationContext.getBeanDefinitionNames();
    for (String name:beanDefinitionNames) {
      System.out.println(name);
    }
  }

测试结果
显示了rainbow

org.springframework.context.annotation.internalConfigurationAnnotationProcessor
org.springframework.context.annotation.internalAutowiredAnnotationProcessor
org.springframework.context.annotation.internalRequiredAnnotationProcessor
org.springframework.context.event.internalEventListenerProcessor
org.springframework.context.event.internalEventListenerFactory
mainConfig
bookController
bookDAO
bookService
com.atguigu.bean.Color
com.atguigu.bean.Red
com.atguigu.bean.Blue
com.atguigu.bean.Yellow
person
female
rainbow
17、使用FactoryBean接口导入类

创建自定义工厂类,实现FactoryBean接口,并改写一下方法
getObject() //返回工厂生产的类对象
getObjectType()//返回工厂生产的类类型
isSingleton() //返回单例

创建自定义工厂类
这里实现FactoryBean接口,实现三个方法,注意泛型中使用Color类


public class ColorFactory implements FactoryBean<Color> {
  //返回一个Color对象,这个对象会添加到容器中

  @Override
  public Color getObject() throws Exception {
    System.out.println("color factory generate a instance");
    return new Color();
  }

  @Override
  public Class<?> getObjectType() {
    return Color.class;
  }


  @Override
  public boolean isSingleton() {
    //true:返回单例,在容器中保存一份
    //false:返回多份类实例,每次获取工厂bean都会创建一个新的对象
    return false;
  }
}

在配置类中定义这个类组件
注意:
@Bean
public ColorFactory colorFactoryBean(){
return new ColorFactory();
}
}

@Configuration
@ComponentScan(value = "com.atguigu")
@Import({Color.class, Red.class,MyImportSelect.class,MyImportBeanDefinitionRegistrar.class})
public class MainConfig {
//  @Scope("prototype")
  @Lazy
  @Bean("person")//指定bean的自定义id
  public Person person(){

    return new Person("张三",20);
  }

  @Conditional({WindowsCondition.class})
  @Bean("male")
  public Person personMale(){
    return new Person("lisi",33);
  }

  @Conditional({LinuxCondition.class})
  @Bean("female")
  public Person personFemale(){
    return new Person("wanger",23);
  }

  @Bean
  public ColorFactory colorFactoryBean(){
    return new ColorFactory();
  }
}

测试类

public class MainTest {
  AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(MainConfig.class);

  @Test
  public void testImport(){
    printBeans(applicationContext);

    //工厂bean获取的是调用的是getObject创建的对象(Color类)
    Object bean1 = applicationContext.getBean("colorFactoryBean");
    Object bean2 = applicationContext.getBean("colorFactoryBean");

    System.out.println(bean1);
    System.out.println(bean2.getClass());//class com.atguigu.bean.Color
    System.out.println(bean1==bean2);
  }

  private void printBeans(AnnotationConfigApplicationContext applicationContext){
    String[] beanDefinitionNames = applicationContext.getBeanDefinitionNames();
    for (String name:beanDefinitionNames) {
      System.out.println(name);
    }
  }

测试结果文章来源地址https://www.toymoban.com/news/detail-623245.html

org.springframework.context.annotation.internalConfigurationAnnotationProcessor
org.springframework.context.annotation.internalAutowiredAnnotationProcessor
org.springframework.context.annotation.internalRequiredAnnotationProcessor
org.springframework.context.event.internalEventListenerProcessor
org.springframework.context.event.internalEventListenerFactory
mainConfig
bookController
bookDAO
bookService
com.atguigu.bean.Color
com.atguigu.bean.Red
com.atguigu.bean.Blue
com.atguigu.bean.Yellow
person
female
colorFactoryBean
rainbow
color factory generate a instance
color factory generate a instance
com.atguigu.bean.Color@79c97cb
class com.atguigu.bean.Color
false

到了这里,关于spring注解驱动开发(一)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Spring注解驱动开发(二)

    注:此笔记为尚硅谷Spring注解驱动教程(雷丰阳源码级讲解)学习笔记,并同时参考[https://blog.csdn.net/xjhqre/article/details/123264069]博主文章,其中包含个人的笔记和理解,仅做学习笔记之用。 简述: 1、实例化一个Bean--也就是我们常说的new; 2、按照Spring上下文对实例化的Bean进

    2024年02月03日
    浏览(36)
  • SSM框架的学习与应用(Spring + Spring MVC + MyBatis)-Java EE企业级应用开发学习记录(第五天)MyBatis的注解开发

    ​ 昨天我们深入学习了 MyBatis多表之间的关联映射,了解掌握了一对一关联映射,一对多关联映射,嵌套查询方式以及嵌套结果方式,掌握了缓存机制的一级缓存,二级缓存等概念,也使用了代码进行复现理解 。但是都是基于XML配置文件的方式来实现的,现在我们要学习一下

    2024年02月11日
    浏览(59)
  • spring注解驱动开发(BEAN注册方式与生命周期)

    目录 容器中注册BEAN的方式 BEAN生命周期 包扫描+组件标注注解 @ComponentScan(basePackages = {\\\"com.an.spring.condition\\\"}) @Service @Component @Controller @Repository @BEan方式【导入第三方包里面的组件】 @Import快速给容器中导入一个组件。 1)、@IMport(要导入到容器中的组件),容器就会注入这个组

    2024年02月07日
    浏览(53)
  • Spring注解驱动开发之常用注解案例_告别在XML中配置Bean

    注解驱动开发就是不再使用Spring的bean.xml文件,改为纯使用注解的方式开发 @Configuration 此注解为配置类注解,相当于spring.xml文件,即配置类==配置文件 @Bean 给容器中注册一个Bean;类型为返回值的类型,id默认是用方法名作为id 示例 Person类(后续注解配置类中都会以此类举例),

    2024年01月21日
    浏览(49)
  • QT学习笔记-Linux ARM环境下实现QT程序通过ODBC驱动访问SQLServer数据库

    在嵌入式系统中使用QT开发上位机应用时不可避免的会涉及访问各种数据库的场景,而服务端数据库的种类则有多种可能(Oracle、Postgresql、MySql、SQLServer),本文就介绍一下如何实现在Linux Arm环境下实现QT程序通过ODBC驱动访问SQLServer数据库的。 开发环境操作系统:windows10专业

    2024年02月12日
    浏览(53)
  • [开发|数据库] java程序人大金仓数据库适配笔记

    需要去人大金仓https://www.kingbase.com.cn/qd/index.htm下载linux版iso文件和授权文件(license-企业版-90天)。 iso文件需要挂载在指定目录下。 参考:(https://www.cnblogs.com/bluestorm/p/16941812.html)。 人大金仓数据库安装过程中出现乱码/内容不显示是因为jdk版本不匹配,通过asdf更换java版本为

    2024年02月12日
    浏览(49)
  • 基于Spring注解 + MyBatis + Servlet 实现数据库交换的小小Demo

    配置数据库连接信息 db.properties 配置web.xml 配置logback.xml配置文件 配置applicationContext.xml 里面的bean 配置myBatis核心配置文件mybatis-config.xml 创建实体类对象User 创建LoginServlet响应前端的数据 创建UserService 接口 创建UserMapper接口 创建UserServiceImpl 接口实现类 按照这样的方式进行拼接

    2024年02月02日
    浏览(81)
  • Spring AOP官方文档学习笔记(二)之基于注解的Spring AOP

    1.@Aspect注解 (1) @Aspect注解用于声明一个切面类,我们可在该类中来自定义切面,早在Spring之前,AspectJ框架中就已经存在了这么一个注解,而Spring为了提供统一的注解风格,因此采用了和AspectJ框架相同的注解方式,这便是@Aspect注解的由来,换句话说,在Spring想做AOP框架之前,

    2023年04月17日
    浏览(42)
  • Qt+MySql开发笔记:Qt5.9.3的msvc2017x64版本编译MySql8.0.16版本驱动并Demo连接数据库测试

    若该文为原创文章,转载请注明原文出处 本文章博客地址:https://hpzwl.blog.csdn.net/article/details/130381428 红胖子网络科技博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬结合等等)持续更新中…   mysql驱动版本msvc2015x32版本调

    2023年04月26日
    浏览(78)
  • Java企业级开发学习笔记(4.4)Spring Boot加载自定义配置文件

    创建 Spring Boot 项目 单击【创建】按钮 在 resources 里创建 myconfig.properties 文件 设置文件编码 设置学生的四个属性值 在 cn.kox.boot 包里创建config子包,在子包里创建 StudentConfig 打开自带的测试类 ConfigDemo01ApplicationTests 注入学生配置实体,创建 testStudentConfig() 测试方法,在里面输

    2024年02月08日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包