Java Spring

Java Web框架篇之Spring 为什么要有Spring(IoC) Web发展的几个阶段 (1)初级阶段:使用Model1(JSP+JavaBean)/Model2(Jsp+Servlet+JavaBean)/三层模型(表示层(JSP/Servlet)+业务逻辑层+持久化层)进行开发; (2)中级阶段:使用EJB进行分布式应用开发,忍受重量级框架带来的种种麻烦; (3)高级阶段:使用Spring春天带给我们的美好,但是还要忍受很... 阅读详情

Spring概述

  1. spring是一个轻量级的开源的JavaEE框架,目的是解决企业级应用开发的复杂性
  2. spring有两个核心部分:IOC(反转控制)和AOP(面向切面编程),IOC作用是将创建对象的过程交给spring来管理;AOP作用是不需要修改源代码就能进行功能的添加。

Spring入门案例

在这里插入图片描述
步骤:

  1. 首先创建一个基本的java工程

  2. 然后创建lib文件夹,放置五个jar包(beans、context、core、expression、commons-logging)在这里插入图片描述

  3. 然后引用上步的jar包在这里插入图片描述

  4. 创建一个实体类在这里插入图片描述

  5. 创建一个spring配置文件(xml格式),并配置想要创建的实体类在这里插入图片描述
    配置文件中在beans节点下写一个bean标签,给标签写一个id属性和class属性,这个id作用是在创建对应实体类对象的时候进行获取该节点描述的。class属性是指定该实体类的类文件路径。

  6. 写一个测试类,用来导入配置,创建实例,代用实例方法在这里插入图片描述

  		//加载spring配置
        ApplicationContext context=new ClassPathXmlApplicationContext("spring_demo.xml");
        //获取bean实例
        User user= context.getBean("user", User.class);
        //调用实例的方法
        user.show();

什么是IOC

IOC全称inversion if control(反转控制),它是面向对象对象编程中的一种设计原则,目的就是降低耦合度。假如有class1和class2两个类,如果我想在class1中调用class2的一个实例方法,那么就需要在class1中new一个class2的实例,有了IOC之后就不需要在class1中创建class2的实例来实现了,创建class2实例和调用实例成员的过程交给spring的IOC来处理,这样就降低了代码的耦合度。

IOC基本原理

实现IOC的三个技术:(1)xml解析 (2)工厂模式 ,工厂模式简单理解就是你想要什么我就给你返回什么(3)反射

  • IOC实现过程:

1.在xml中配置实体类的bean节点

<bean id="user" class="com.company.demo.User"></bean>

2.解析xml文件中的属性值,通过反射创建实例,通过工厂模式返回实例

//创建一个User工厂类
public class UserFactory() {
    public static User getUserInstance() {
        //解析xml,拿到bean节点中的class属性值
        String classValue = bean节点中的class属性值;
        //通过反射创建实例
        Class clazz = Class.forName(classValue);
        return (User) clazz.newInstance();
    }
}

IOC容器的两个核心接口

从IOC的基本原理来看,IOC的底层还是工厂。IOC容器中有两个核心的接口:Beanfactory和ApplicationContext,这两个接口的作用是一样的,都是spring中通过读取bean配置文件来创建对象的。可以将ApplicationContext看成是继承自BeanFactory的接口,但是二者还是有不同的地方:

  • BeanFactory:这个接口是spring内部来使用的,不提供给开发人员调用,它在读取配置文件的时候并没有创建对象,而是在适用对象的时候才创建。
 		//加载spring配置,在读取配置文件的时候并没有创建对象
        BeanFactory context=new ClassPathXmlApplicationContext("spring_demo.xml");
        //获取bean实例,在调用的时候才创建
        User user= context.getBean("user", User.class);
  • ApplicationContext::这个接口继承自BeanFactory,所以功能比BeanFactory更强大,区别是这个接口在读取配置文件的时候就已经创建了对象。
		//加载spring配置,此时就已经创建了对象
        ApplicationContext context=new ClassPathXmlApplicationContext("spring_demo.xml");
        //获取bean实例
        User user= context.getBean("user", User.class);

ApplicationContext接口的两个实现类

FileSystemXmlApplicationContext(“这个填xml文件在文件系统中的绝对路径”)
ClassPathXmlApplicationContext(“这个填xml文件相对于src目录的路径”)

IOC进行Bean管理

  • Bean管理包括两个方面:(1)通过spring创建对象(2)通过spring进行属性注入,也叫作依赖注入(DI),IOC和DI之间的关系可以理解为DI是IOC的一种实现方式。
  • 创建对象和注入属性均可通过xml方式和注解方式进行操作。 通过xml方式进行创建对象上面已经说过,下面是通过xml方式进行注入属性:

1.通过set方式进行属性注入
(1)首先要在实体类中声明属性名称,写好set方法

	public class User {
    private String name;

    public void setName(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    //show方法
    public void show() {
        System.out.println(this.name);
    }
}

(2)在spring配置文件中配置bean节点,然后再配置属性节点

 	<bean id="user" class="com.company.demo.User">
        <property name="name" value="张三"></property>
    </bean>

(3)加载配置文件,程序在加载配置文件的同时,就创建了对象,在完成创建对象的基础上,进行依赖注入

	public static void main(String[] args) {
        //加载spring配置,此时就已经创建了对象
        ApplicationContext context=new ClassPathXmlApplicationContext("spring_demo.xml");
        //获取bean实例
        User user= context.getBean("user", User.class);
        //调用实例的方法
        user.show();
    }

注意:上面这种方式在实例化对象时是默认调用这个类的“无参构造函数”来实例化的,所以此时类中必须有一个默认的的无参构造或者自己手写一个无参构造,否则报错

2.通过“有参构造函数”方式进行属性注入
(1)声明类,声明属性,声明一个有参构造函数

public class User {
    private String name;

    //声明一个有参构造函数
    public User(String name) {
        this.name = name;
    }
    
    //show方法
    public void show() {
        System.out.println(this.name);
    }
}

(2)配置bean节点

	<bean id="user" class="com.company.demo.User">
        <constructor-arg name="name" value="张三"></constructor-arg>
    </bean>

(3)加载spring配置文件,通过spring创建对象

		//加载spring配置,此时就已经创建了对象
        ApplicationContext context=new ClassPathXmlApplicationContext("spring_demo.xml");
        //获取bean实例
        User user= context.getBean("user", User.class);
        //调用实例的方法
        user.show();

Xml注入其他类型属性

  1. 字面量
    (1) 注入null值
		<!--属性值为null-->
        <property name="name">
            <null/>
        </property>

(2)注入特殊符号

		<!--属性值为特殊符号-->
        <property name="name">
           <value>
               <![CDATA[特殊符号]]>
           </value>
        </property>

(3)注入对象类型属性
(4)注入数组或集合类型属性

对象类型属性注入——外部bean和内部bean

当一个类的属性是对象类型时,此时注入属性就可以通过外部bean或内部bean的方式注入,例如在service层调用dao层:
外部Bean写法:通过ref属性引入另一个bean

 	<bean id="user_dao"  class="com.company.demo.dao.UserDaoImpl"></bean>
    <bean id="user_service" class="com.company.demo.service.UserServiceImpl">
    	<!--注入外部bean时需要用ref属性-->
        <property name="user_dao" ref="user_dao"></property>
    </bean>

内部Bean写法:不需要写ref属性,直接将另一个bean对象写在property标签中

	 <bean id="user_service" class="com.company.demo.service.UserServiceImpl">
        <property name="user_dao" >
            <bean id="user_dao"  class="com.company.demo.dao.UserDaoImpl"></bean>
        </property>
    </bean>

数组和集合类型属性注入(Array、List、Set、Map)

public class Stu {
    private String[] course1;
    private List<String> course2;
    private Set<String> course3;
    private Map<String,String> course4;

    public void setCourse1(String[] course1) {
        this.course1 = course1;
    }

    public void setCourse2(List<String> course2) {
        this.course2 = course2;
    }

    public void setCourse3(Set<String> course3) {
        this.course3 = course3;
    }

    public void setCourse4(Map<String, String> course4) {
        this.course4 = course4;
    }
    //show方法
    public void show(){
        System.out.println("数组属性长度:"+this.course1.length);
        System.out.println("List集合属性长度"+this.course2.size());
        System.out.println("Set集合属性长度"+this.course3.size());
        System.out.println("Map集合属性长度"+this.course4.size());
    }
}
		<bean id="stu" class="com.company.demo.bean.Stu">
            <!--数组类型属性注入-->
            <property name="course1">
               <array>
                   <value>java1</value>
                   <value>php1</value>
               </array>
            </property>
            <!--List集合类型属性注入-->
            <property name="course2">
                <list>
                    <value>java2</value>
                    <value>php2</value>
                </list>
            </property>
            <!--Set集合类型属性注入-->
            <property name="course3">
                <set>
                    <value>java3</value>
                    <value>php3</value>
                </set>
            </property>
            <!--Map集合类型属性注入-->
            <property name="course4">
                <map>
                    <entry key="JAVA4" value="java4"></entry>
                    <entry key="PHP4" value="php4"></entry>
                </map>
            </property>
        </bean>

普通Bean和工厂Bean

  • 普通Bean和工厂Bean的区别:普通Bean是我们在spring配置文件中配置的是什么类型的对象,就返回什么类型的对象。工厂Bean的特点是配置的对象的类型和返回的对象的类型可以不一样。
  • 如何声明一个工厂Bean呢,首先声明一个工厂Bean的类,然后让它实现FactoryBean这个接口
public class MyFactoryBean implements FactoryBean<Stu> {
    @Override
    public Stu getObject() throws Exception {
        Stu stu=new Stu();
        return stu;
    }

    @Override
    public Class<?> getObjectType() {
        return null;
    }

    @Override
    public boolean isSingleton() {
        return false;
    }
}
<bean id="myBean" class="com.company.demo.factorybean.MyFactoryBean"></bean>
 		//加载配置文件
        ApplicationContext context=new ClassPathXmlApplicationContext("bean.xml");
        //获取对象
        Stu stu= context.getBean("myBean",Stu.class);
        //调用对象
        stu.show();

很明显可以看出,在spring配置文件中我们配置的是MyFactoryBean类型的对象,但是返回的却是Stu类型的对象,这就是工厂Bean。

单实例和多实例

  • 在spring配置中,对象默认是单实例,也就是每次通过spring获取的对象是同一个,内存地址是相同的。通过代码来验证下:
		//加载配置文件
        ApplicationContext context=new ClassPathXmlApplicationContext("bean.xml");
        //获取对象
        Stu stu1= context.getBean("stu",Stu.class);
        Stu stu2= context.getBean("stu",Stu.class);
        //输出对象内存地址,验证是多实例还是单实例
        System.out.println(stu1);//com.company.demo.bean.Stu@11c9af63
        System.out.println(stu2);//com.company.demo.bean.Stu@11c9af63
<bean id="stu" class="com.company.demo.bean.Stu"></bean>

由上可知,两个对象的内存地址是完全一样的,所以spring配置中Bean默认是返回单实例对象。

  • 那么如何设置返回单实例或者多实例呢,很简单,只需要再spring配置文件的Bean节点中添加一个scope属性即可,该属性有两个值,分别代表返回单实例和多实例对象,singleton表示返回单实例对象,prototype表示返回多实例对象。下面我们来验证下多实例:
		//加载配置文件
        ApplicationContext context=new ClassPathXmlApplicationContext("bean.xml");
        //获取对象
        Stu stu1= context.getBean("stu",Stu.class);
        Stu stu2= context.getBean("stu",Stu.class);
        //输出对象内存地址,验证是多实例还是单实例
        System.out.println(stu1);//com.company.demo.bean.Stu@5aebe890
        System.out.println(stu2);//com.company.demo.bean.Stu@65d09a04
<bean id="stu" class="com.company.demo.bean.Stu" scope="prototype"></bean>

可以看出,当设置bean节点中scope属性为prototype时,两次返回的对象内存地址不同,因此是多实例。

  • scope属性的singleton和prototype两个值的区别
    (1)singleton是单实例,prototype是多实例
    (2)如果设置为单实例,那么在spring配置文件加载的时候,单实例对象就被创建了;如果设置为多实例,在加载spring配置文件的时候,并没有进行对象的创建,而是在调用getBean()方法的时候进行多实例的创建。

Bean的生命周期

  • 生命周期:

(1)创建Bean实例,默认调用无参的构造函数
(2)设置属性值和或者是引入外部Bean,调用set方法
(3)执行Bean里面初始化的方法,这个方法需要手动配置
(4)获取Bean,使用Bean
(5)销毁Bean实例,执行销毁的方法,这个方法需要配置

  • 初始化和销毁方法声明和配置:

在这里插入图片描述
在这里插入图片描述

  • 后置处理器

如果配置上后置处理器,那么整个生命周期就多了两步,这两步分别在初始化方法执行前后,这样就变成了七个关键点。
首先要声明一个后置处理器的类,让这个类实现BeanPostProcessor这个接口,实现它的两个方法,这两个方法会在Bean的初始化前后分别执行,分别是postProcessBeforeInitiallization()和postProcessAfterInitiallization()。
(1)创建Bean实例,默认调用无参的构造函数
(2)设置属性值和或者是引入外部Bean,调用set方法
(3)执行后置处理器的postProcessBeforeInitiallization()方法
(4)执行Bean里面初始化的方法,这个方法需要手动配置
(5)执行后置处理器的postProcessAfterInitiallization()方法
(6)获取Bean,使用Bean
(7)销毁Bean实例,执行销毁的方法,这个方法需要配置
声明后置处理器以及配置:

//声明一个后置处理器
public class BeanInitBeforeAndAfter implements BeanPostProcessor {
    @Override
    public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
        //Bean初始化之前执行,返回创建的Bean实例
        return bean;
    }

    @Override
    public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
        //Bean初始化之后执行,返回创建的Bean实例
        return bean;
    }
}
<!-- spring识别到这个类实现了BeanPostProcessor这个接口,就会把它当做一个后置处理器,然后其他Bean实例就都有了初始化前后的两个过程-->
        <bean id="beaninit" class="com.company.demo.bean.BeanInitBeforeAndAfter"></bean>

注意:spring识别到这个类实现了BeanPostProcessor这个接口,就会把它当做一个后置处理器,然后其他Bean实例就都有了初始化前后的两个过程

XML自动装配

  • 什么是自动装配?

自动装配就是在spring配置文件中进行bean的配置的时候,不需要我们手动写属性标签了,Bean标签的autowire属性可实现自动装配,spring识别到这个属性后,会自动帮助我们进行属性注入(引入外部Bean)

  • autowire属性的两个属性值

(1)byName:通过识别属性名称进行自动装配

		<!--根据属性名称进行自动装配,切记引入的外部bean的id一定要和本类的属性名称一样,spring才能进行自动装配-->
        <bean id="emp" class="com.company.demo.aotuwire.Emp" autowire="byName"></bean>
        <bean id="dept" class="com.company.demo.aotuwire.Dept"></bean>

注:根据属性名称进行自动装配,切记引入的外部bean的id一定要和本类的属性名称一样,spring才能进行自动装配
(2)byType:通过识别属性类型进行自动装配

		<!--通过属性类型进行自动装配有个问题,就是被引入类型的Bean对象只能有一个,不然会报错-->
        <bean id="emp" class="com.company.demo.aotuwire.Emp" autowire="byType"></bean>
        <!--外部Bean对象只能有一个-->
        <bean id="dept" class="com.company.demo.aotuwire.Dept"></bean>  
        <!--<bean id="dept2" class="com.company.demo.aotuwire.Dept"></bean>-->
Java必修课——Spring框架 Spring是轻量级的开源的JAVAEE框架Spring可以解决企业应用开发的复杂性Spring有两个核心部分:IOC和AopIOC:控制反转,把创建对象的过程交个Spring进行管理Aop:面向切面,不修改源代码进行功能增强Spring特点方便解耦,简化开发Aop编程支持方便程序测试方便和其他框架进行整合方便进行事务操作降低API的使用难度IOC容器IOC底层原理IOC接口(BeanFactory)IOC操作Bean管理(基于XML)IOC操作Bean管理(基于注解) 阅读详情

相关推荐

Java SPI概念、实现原理、优缺点、应用场景、使用步骤、实战SPI案例

在当今互联网时代,应用程序越来越复杂,对于我们开发人员来说,如何实现高效的组件化和模块化已经成为了一个重要的问题。而Java SPI(Service Provider Interface)机制,作为一种基于接口的服务发现机制,可以帮助我们更好地解决这个问题。这样会程序具有高度的灵活性、解耦、可扩展性!在本篇博客中,我们将深入探讨Java SPI 的概念、实现原理、优缺点、应用场景和使用步骤,并通过实战演示来说明如何使用 Java SPI 实现各种功能。

小王博客基地 1万+

java后台开发入门(springboot快速入门)

带领大家借助当下比较流行的springboot框架快速开发属于自己的java后台。即便你是编程小白,没有任何编程基础也可以学习本课程。知识点1,Java2,springboot3,freemarker4,bootstrap4.35,Javaweb6,微信小程序同时会借助当下最热门的微信小程序来作为我们的前端展示。所以课程中也会教给大家一部分小程序开发的知识。大家只需要跟着老师一步步学习,我们既可以学习到java知识,也可以学习到小程序开发和web开发相关的知识。我们学习过程中会有老师在线实时解答,每节课都会有对应的源码和配套笔记给到大家。

Java Spring、Spring MVC、Spring Boot 和 Spring Cloud 的关系与区别

本文详细介绍了 Java 开发中常用的 Spring 系列框架及其关系。Spring 是核心框架,提供控制反转(IoC)和面向切面编程(AOP)等基础功能。Spring MVC 是 Spring 的模块,专注于 Web 开发,采用 MVC 设计模式。Spring Boot 简化了 Spring 应用的初始搭建和开发,提供默认配置和嵌入式服务器。Spring Cloud 基于 Spring Boot,扩展了分布式系统开发的能力,提供服务发现、熔断器等功能。这些框架共同构成了强大的 Java 开发生态系统,满足

C_V_Better的博客 1306

Java 必看的 Spring 知识汇总

Spring框架是由于软件开发的复杂性而创建的。Spring使用的是基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅仅限于服务器端的开发。从简单性、可测试性和松耦合性的角度而言,绝大部分Java应用都可以从Spring中受益。 Spring优点: 低侵入式设计,代码的污染极低; 独立于各种应用服务器,基于Spring框架的应用,可以真正实现Write Once,Run Anywhere的承诺; Spring的IoC容器降低了业务对象替换的复杂性,提高了组件之间的解耦 S

CRMEB小程序商城的博客 6513

JAVA面试之Spring篇

Spring是一个轻量级的IoC和AOP容器框架。是为Java应用程序提供基础性服务的一套框架,目的是 用于简化企业应用程序的开发,它使得开发者只需要关心业务需求。常见的配置方式有三种:基于 XML的配置、基于注解的配置、基于Java的配置。:核心类库,提供IOC服务;:提供框架式的Bean访问方式,以及企业级功能(JNDI、定时任务等);Spring AOP:AOP服务;Spring DAO:对JDBC的抽象,简化了数据访问异常的处理;Spring ORM:对现有的ORM框架的支持;

RE_Z002的博客 1113

Java面试题:Spring,Spring MVC,Spring Boot 之间什么关系?

点开之前,我不知道这么给力!

m0_68103666的博客 1290

Java、Spring、SpringBoot

1.解耦配置信息和代码如数据库连接信息、服务端口号、线性池大小等。

2301_76854264的博客 1051

Spring Framework之基于Java的容器配置

基于Java的容器配置 @Bean @Configuration @Import

usertest1的博客 943

Java经典框架之Spring

即使ServiceB.methodB的事务已经被提交,可是ServiceA.methodA在接下来fail要回滚,ServiceB.methodB也要回滚。再必须强调一遍,不是事务隔离级别设置得越高越好,事务隔离级别设置得越高,意味着势必要花手段去加锁用以保证事务的正确性,那么效率就要降低,因此实际开发中往往要在效率和并发正确性之间做一个取舍,一般情况下会设置为READ_COMMITED,此时避免了脏读,并发性也还不错,之后再通过一些别的手段去解决不可重复读和幻读的问题就好了。这是一个郑重的承诺。

m0_52514893的博客 4381

Java Spring框架详解

本文将详细介绍该java spring框架的各种功能和使用方法,并提供多种例子用于说明。

however的博客 431

视觉定位避坑指南:基于双mark点的坐标转换常见错误排查

本文详细解析了工业视觉项目中基于双mark点的坐标转换常见错误及排查方法,涵盖旋转矩阵构建、坐标系原点选择、图像预处理优化等关键环节。通过实战案例和代码示例,帮助工程师避免定位偏差,提升系统精度,特别适用于自动化检测和精密制造场景。

7z8x2c4v6b9的博客 167

Spring Java面试

"面向切面编程(AOP)是一种用于处理横切关注点的编程范式。在传统OOP中,像日志、安全和事务这样的功能往往会分散在各个业务模块中,导致代码重复和耦合。AOP通过将这些横切关注点模块化为'切面'来解决这个问题。在Spring AOP中,我们可以定义切入点表达式来指定哪些方法需要被拦截,然后通过前置通知、后置通知或环绕通知等方式在这些方法执行前后添加额外行为。例如,我们可以创建一个事务管理切面,用@Around注解确保方法在事务上下文中执行,而不需要在每个业务方法中重复事务代码。

M_Ywoaini1314的博客 758

UE5在Ubuntu22.04.4下的高效开发环境配置指南

本文详细介绍了在Ubuntu 22.04.4系统上配置UE5高效开发环境的完整指南,包括系统准备、显卡驱动安装、UE5引擎编译与配置、开发工具链设置以及性能优化技巧。通过逐步指导,帮助开发者快速搭建稳定的UE5开发环境,解决常见问题,提升开发效率。

weixin_29251131的博客 382

Java Spring详解

Spring 是一个轻量级的 Java 开发框架,由 Rod Johnson 在 2003 年创建。它的核心目标是简化企业级 Java 开发,通过提供全面的基础设施和模块化的设计,帮助开发者更高效地构建 Java 应用程序。Spring 遵循 IoC(控制反转)和 AOP(面向切面编程)的设计原则,具有高度的可扩展性和灵活性。

代码写得顺,火锅吃得香!🔥✨ 875

美团外卖 mtgsig 1.2 逆向工程与补环境实战指南

本文深入解析了美团外卖核心风控参数mtgsig 1.2的生成机制与逆向实战。通过拆解其复杂的JSON结构,揭示了设备指纹、环境信息加密等关键字段。重点阐述了在Node.js中模拟浏览器环境(补环境)的核心方法,包括DOM/BOM对象、本地存储及Canvas/WebGL等高级指纹的模拟技巧,为安全研究和合规自动化测试提供了一套完整的技术指南。

uber9的博客 407

EWF写保护功能详解:从安装到实战操作指南

本文详细介绍了EWF写保护功能的安装与实战操作指南。EWF(Enhanced Write Filter)通过重定向写入操作保护硬盘分区,特别适合需要长期稳定运行的系统场景。文章涵盖从安装准备、图形界面操作到命令行高级管理的全流程,并提供了常见问题的解决方案,帮助用户轻松掌握这一实用工具。

weixin_28710999的博客 446

Java Spring Boot 和 Spring 区别

在 Java 开发领域,Spring 框架和 Spring Boot 框架都具有极高的知名度和广泛的应用。它们之间既有紧密的联系,又存在一些显著的区别,理解这些区别对于合理选择和高效使用这两个框架至关重要。一、Spring 框架概述Spring 是一个轻量级的 Java 开发框架,它为企业级应用开发提供了全面的基础设施支持...

qq_35485206的博客 1258

【Unity游戏开发】SDK接入与集成——小白入门篇

一、简介   通常一款游戏开发到后期,一般都会涉及到第三方SDK的接入与集成,对于不熟悉SDK接入的同学来说,接SDK每次都是云里雾里,而熟悉SDK接入的同学又觉得不断地重复做接入SDK工作这样没有成就感,太尼玛无聊了(Android渠道一弄就十几个,直接吐血)。其实通常情况下接入SDK都是很简单的一个过程,本系列博客就让马三和大家从小白开始,从零基础开始学习如何接入SDK以及一些常见的SDK的...

weixin_34195142的博客 5763

Java笔记——Java -- Spring_java spring

一、Spring简介1. 概述2. Spring两个核心特性① IoC(Inverse of Control)–> 控制反转② AoP(Aspect Oriented Programing) --> 面向切面编程二、IoC详解1. 核心容器① ApplicationContext是BeanFactory的子接口,在基本功能之上提供了更多的功能:2. ApplicationContext常见实现① FileSystemXmlApplicationContext:全路径名找Xml ② ClassPathXmlA

a25847a的博客 1605

Transformers 实战修炼与源码剖析专栏大纲

本专栏以 Hugging Face Transformers 为主线,围绕“能用、会调、敢上线、懂源码”四个目标展开。内容不把理论堆成公式墙,而是用真实或拟真的业务场景驱动:客服分类、合同抽取、知识库问答、模型微调、推理服务、监控告警、源码扩展等。采用“业务痛点 → 三人剧本对话 → 代码实战 → 总结思考”的四段式结构,让读者在动手完成一个个小项目的过程中,逐步理解 Tokenizer、Model、Pipeline、Trainer、Generation、PEFT、Accelerate、Serving等概念

davidwang456的专栏 921

电机瞬态分析基础(2):理想电机的基本假设和正方向规定

电机瞬态分析基础之理想电机假设条件和正方向规定

weixin_45670943的博客 1144

Spring 和 JAVA 的牵绊

Spring 和 JAVA 的牵绊 Spring框架是一个开放源代码的J2EE应用程序框架,是针对bean的生命周期进行管理的轻量级容(lightweight container)。Spring提供了功能强大IOC、AOP及Web MVC等功能。Spring可以单独应用于构筑应用程序,也可以和Struts、Webwork、Tapestry等Web框架组合使用,并且可以与 Swing等桌面应用程序AP组合。 Spring Framework 和 JAVA 版本的牵绊 Spring Framework 后

qq_34934262的博客 667

2026最新版OpenClaw安装:Windows WSL2从零到跑通

Windows WSL2安装OpenClaw指南 本文详细介绍了在Windows系统上通过WSL2部署OpenClaw AI助理的完整流程。WSL2结合了Windows易用性和Linux高性能,特别适合Windows用户、开发者、学生和技术爱好者。文章涵盖硬件要求(推荐i5/16GB/SSD)、系统准备(Windows 10/11+WSL2)、环境部署(Python/Node.js/Redis)和OpenClaw配置(克隆/编译/初始化)等关键步骤。通过WSL2,用户可在保留Windows操作习惯的同

一键难忘的博客 2345

如果 Spring 没了,Java 会怎么样?

在程序员圈子里,其实一直存在一条隐形鄙视链:C++ 看不起 JavaGo 看不起 Java有时候很多人甚至直接说:“Java 就是历史包袱。但奇怪的是,全球银行系统金融清算系统大型电商后台政府系统几乎清一色。都不是。**-**

stone_tmp的博客 286

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

java spring mysql配置_Spring 的java 配置方式

Java配置是Spring4.x推荐的配置方式,可以完全替代xml配置。1.1@Configuration 和 @BeanSpring的Java配置方式是通过 @Configuration 和 @Bean 这两个注解实现的:1、@Configuration 作用于类上,相当于一个xml配置文件;2、@Bean 作用于方法上,相当于xml配置中的;1.2 示例该示例演示了通过Java配置的方式进行配...

weixin_30780097的博客 281

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

spring基于java配置_Spring中基于java的配置

Spring中为了减少XML配置,可以声明一个配置类类对bean进行配置,主要用到两个注解@Configuration和@bean例子:首先,XML中进行少量的配置来启动java配置:定义一个配置类,用@Configuration注解该类,等价于XML里的,用@Bean注解方法,等价于XML配置的,方法名等于beanId。代码如下:@Configurationpublic classSpringC...

weixin_39822673的博客 245

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

上一篇: 初学Java,上手SpringBoot(主要学习下Java基础中和C#不同的地方,暂时满足javaweb开发就ok,然后直接上手Spring Boot)
下一篇: mysql连接报错 2013- Lost connection to MySQL server at ‘reading authorization packet 解决
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值