Spring教程(二)--注解&AOP的XML方式及注解方式

从PLC到机械臂:揭秘工业自动化中的信号交互与控制逻辑 本文深入解析了PLC与机械臂在工业自动化中的信号交互与控制逻辑,详细介绍了硬件连接方案、通信机制及控制逻辑设计。通过西门子PLC与六轴机械臂的实战案例,展示了从信号采集到动作执行的完整流程,并探讨了高级控制策略与行业应用前景,为工程师提供了一套完整的实践框架。 阅读详情

一、Spring的IOC注解开发

1.1 环境搭建

Spring4版本中,还需引入aop的包

在这里插入图片描述

applicationContext.xml引入约束:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <!-- bean definitions here -->

</beans>

ProductDao.java

package com.spring.demo01;

public interface ProductDao {
	
	public void save();
}

ProductDaoImpl.java

需配置Component属性

package com.spring.demo01;

import org.springframework.stereotype.Component;

@Component("productDao") //相当于在配置文件方式<bean id="productDao" class="com.spring.demo01.ProductDaoImpl">
public class ProductDaoImpl implements ProductDao {

	@Override
	public void save() {
		System.out.println("ProductDaoImpl保存了商品");
	}	
}

配置文件配置组件扫描信息

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <!-- bean definitions here -->

	<!-- Spring IOC的注解方式, -->
	<!-- 需配置组件扫描, 意思为配置包的类使用注解 -->
	<context:component-scan base-package="com.spring.demo01"></context:component-scan>

</beans>

TestDemo01.java

package com.spring.demo01;

import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.stereotype.Component;

/**
 * Spring的IOC注解开发的测试类
 * @author cf
 *
 */


public class TestDemo01 {

	@Test
	//Spring的IOC的注解方式
	public void demo01() {
		ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
		ProductDao productDao = (ProductDao) applicationContext.getBean("productDao");
		productDao.save();
		
	}
}

结果如下:

在这里插入图片描述

二、注解方式设置属性的值

  • 有set方法

在set方法出设置注解

ProductDaoImpl.java

package com.spring.demo01;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

@Component("productDao") //相当于在配置文件方式<bean id="productDao" class="com.spring.demo01.ProductDaoImpl">
public class ProductDaoImpl implements ProductDao {
	private String name;
	
	@Value("Model S")
	public void setName(String name) {
		this.name = name;
	}

	@Override
	public void save() {
		System.out.println("ProductDaoImpl保存了商品" + name);
	}
}

结果如下:

在这里插入图片描述

  • 无set方法

在属性值上设置注解

package com.spring.demo01;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

@Component("productDao") //相当于在配置文件方式<bean id="productDao" class="com.spring.demo01.ProductDaoImpl">
public class ProductDaoImpl implements ProductDao {
	@Value("Tesla Model S")
	private String name;
	
	/*
	 * @Value("Model S") public void setName(String name) { this.name = name; }
	 */

	@Override
	public void save() {
		System.out.println("ProductDaoImpl保存了商品" + name);
	}
}

结果如下:
在这里插入图片描述

三、注解详解

3.1 @Component : 组件

@Component:注解一个类,将此类交给Spring管理

有三个衍生注解:

  • @Controller : web层
  • @Service : service层
  • @Repository : dao层

以上注解与@Component功能相同,只是为了更好的分层

上述事例中的@Component应该修改为@Repository

3.2 属性注入的注解

  • 普通注解

@Value : 设置普通属性的值

  • 对象类型的注解

@Autowired : 设置对象类型注解,从下例可以看到并没有相关class的路径属性,因为是按类型完成注入

创建ServiceDao.java和ServiceDaoImpl.java

package com.spring.demo01;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.sun.tracing.dtrace.Attributes;

@Service("productService")
public class ProductServiceImpl implements ProductService {

	//注入productDao
	@Autowired
	private ProductDao productDao;
	
	@Override
	public void save() {
		System.out.println("ProductServiceImpl启动了");
		productDao.save();
	}

}

结果如下:

在这里插入图片描述
@Qualifier : 强制按名称完成注入,在@Atuowired注解的基础上添加

@Service("productService")
public class ProductServiceImpl implements ProductService {

	//注入productDao
	@Autowired
	@Qualifier("productDao")
	private ProductDao productDao;
	
	@Override
	public void save() {
		System.out.println("ProductServiceImpl启动了");
		productDao.save();
	}

}

@Resource : 可以直接使用Resource用名称实现注入

 @Service("productService")
public class ProductServiceImpl implements ProductService {

	//注入productDao
	/*
	 * @Autowired
	 * 
	 * @Qualifier("productDao")
	 */
	@Resource(name="productDao")
	private ProductDao productDao;
	
	@Override
	public void save() {
		System.out.println("ProductServiceImpl启动了");
		productDao.save();
	}
}

3.3 Bean的作用范围注解

@Scope : 作用范围
singleton : 默认,单例
prototype : 多例
reqeust:Spring创建类后,将类存入request的范围中,应用在web项目中
session:同request,放入session范围中
globalsession:在porlet环境下(子网站)使用,如果无此环境,则相当于session,应用在web项目

四、Spring的AOP

AOP : Aspect Oriented Programming,面向切面编程。

4.1 AOP的XML的方式入门案例

引入jar包
在这里插入图片描述
引入AOP约束:

applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:aop="http://www.springframework.org/schema/aop" xsi:schemaLocation="
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd"> <!-- bean definitions here -->

</beans>

ProductDaoImpl.java

package com.spring4_AOP.demo01;

public class ProductDaoImpl implements ProductDao {

	@Override
	public void save() {
		System.out.println("保存商品");
	}

	@Override
	public void update() {
		System.out.println("更新商品");
	}

	@Override
	public void find() {
		System.out.println("查找商品");
	}

	@Override
	public void delete() {
		System.out.println("删除商品");
	}
}

切面类,MyAspectXML.java

package com.spring4_AOP.demo01;

/**
 * 切面类
 * @author cf
 *
 */
public class MyAspectXML {

	//封装通知的方法
	public void checkPri() {
		System.out.println("已校验操作权限");
	}
}

配置文件 applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:aop="http://www.springframework.org/schema/aop" xsi:schemaLocation="
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd"> <!-- bean definitions here -->
 
	<!-- 配置被增强的对象 -->
	<bean id="productDao" class="com.spring4_AOP.demo01.ProductDaoImpl"></bean>

	<!-- 将切面类交给Spring管理 -->
	<bean id="myAspect" class="com.spring4_AOP.demo01.MyAspectXML"></bean>
	
	<!-- 配置目标类的代理 -->
	<aop:config>
		<!-- 表达式配置类和方法进行增强 -->
		<aop:pointcut expression="execution(* com.spring4_AOP.demo01.ProductDaoImpl.save(..))"  id="pointcut01"/>
		
		<!-- 配置切面 -->
		<aop:aspect ref="myAspect">
			<aop:before method="checkPri" pointcut-ref="pointcut01"/>
		</aop:aspect>
	</aop:config>
</beans>

测试类,使用了Spring整合Junit测试,需引入lib下的spring-test-4.2.4.RELEASE.jar:

package com.spring4_AOP.demo01;

import javax.annotation.Resource;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.context.annotation.Configuration;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:applicationContext.xml")
public class TestDemo01 {
	
	@Resource(name="productDao")
	private ProductDao productDao;
	
	@Test
	public void demo01() {
		productDao.save();
		productDao.update();
		productDao.find();
		productDao.delete();
	}
}

结果如下:

在这里插入图片描述
4.2 通知类型

  • 前置通知:在目标方法执行之前进行操作

入门案例中使用的是前置通知,可以获得切入点的信息

切面类MyAspectXML.java加入切入点信息显示

public class MyAspectXML {

	//封装通知的方法
	public void checkPri(JoinPoint joinPoint) {
		System.out.println("已校验操作权限" + joinPoint);
	}
}

结果如下:

在这里插入图片描述

  • 后置通知:在目标方法执行之后进行操作

可以获得切入点的信息及方法的返回值

配置文件内容修改:

<!-- 配置目标类的代理 -->
	<aop:config>
		<!-- 表达式配置类和方法进行增强 -->
		<aop:pointcut expression="execution(* com.spring4_AOP.demo01.ProductDaoImpl.save(..))"  id="pointcut01"/>
		<aop:pointcut expression="execution(* com.spring4_AOP.demo01.ProductDaoImpl.delete(..))"  id="pointcut02"/>
		
		<!-- 配置切面 -->
		<aop:aspect ref="myAspect">
		<!-- 配置前置切面 -->
			<aop:before method="checkPri" pointcut-ref="pointcut01"/>
			<!-- 配置后置切面 -->
			<aop:after-returning method="writeLog" pointcut-ref="pointcut02" returning="result"/>
		</aop:aspect>
	</aop:config>

MyAspectXML.java增添以下方法

//后置通知的方法
public void writeLog(Object result) {
	System.out.println("日志文件已记录" +"---" + result);
}

ProductDaoImpl.java改写delete方法,增设返回值

@Override
public String delete() {
	System.out.println("删除商品");
	return "记录删除";
}

结果如下:
在这里插入图片描述

  • 环绕通知:在目标方法执行之前和之后都进行操作

环绕通知可以阻止目标方法的执行

MyAspectXML.java文件增加方法

//性能监控
public Object around(ProceedingJoinPoint joinPoint) throws Throwable {
	System.out.println("环绕通知开始前通知");
	
	Object object = joinPoint.proceed();
	
	System.out.println("环绕通知结束后通知");
	return object;
}

applicationContext.xml配置文件修改配置

<!-- 配置目标类的代理 -->
<aop:config>
	<!-- 表达式配置类和方法进行增强 -->
	<aop:pointcut expression="execution(* com.spring4_AOP.demo01.ProductDaoImpl.save(..))"  id="pointcut01"/>
	<aop:pointcut expression="execution(* com.spring4_AOP.demo01.ProductDaoImpl.delete(..))"  id="pointcut02"/>
	<aop:pointcut expression="execution(* com.spring4_AOP.demo01.ProductDaoImpl.update(..))"  id="pointcut03"/>
	
	<!-- 配置切面 -->
	<aop:aspect ref="myAspect">
		<!-- 配置前置切面 -->
		<aop:before method="checkPri" pointcut-ref="pointcut01"/>
		<!-- 配置后置切面 -->
		<aop:after-returning method="writeLog" pointcut-ref="pointcut02" returning="result"/>
		<!-- 配置环绕切面 -->
		<aop:around method="around" pointcut-ref="pointcut03"/>
	</aop:aspect>
</aop:config>

结果如下:
在这里插入图片描述

  • 异常抛出通知:在程序出现异常的时候进行的操作

切面类修改

//异常通知
public void afterThrowing(Throwable ex) { 
	System.out.println("抛出了异常" + "---" + ex);
}

实现类方法修改:

@Override
public void find() {
	System.out.println("查找商品");
	int i=1/0;
}

配置文件applicationContext.xml

<!-- 配置目标类的代理 -->
	<aop:config>
		<!-- 表达式配置类和方法进行增强 -->
		<aop:pointcut expression="execution(* com.spring4_AOP.demo01.ProductDaoImpl.save(..))"  id="pointcut01"/>
		<aop:pointcut expression="execution(* com.spring4_AOP.demo01.ProductDaoImpl.delete(..))"  id="pointcut02"/>
		<aop:pointcut expression="execution(* com.spring4_AOP.demo01.ProductDaoImpl.update(..))"  id="pointcut03"/>
		<aop:pointcut expression="execution(* com.spring4_AOP.demo01.ProductDaoImpl.find(..))"  id="pointcut04"/>
		
		<!-- 配置切面 -->
		<aop:aspect ref="myAspect">
			<!-- 配置前置切面 -->
			<aop:before method="checkPri" pointcut-ref="pointcut01"/>
			<!-- 配置后置切面 -->
			<aop:after-returning method="writeLog" pointcut-ref="pointcut02" returning="result"/>
			<!-- 配置环绕切面 -->
			<aop:around method="around" pointcut-ref="pointcut03"/>
			<!-- 配置异常切面 -->
			<aop:after-throwing method="afterThrowing" pointcut-ref="pointcut04" throwing="ex"/>
		</aop:aspect>
	</aop:config>

结果如下:

在这里插入图片描述

  • 最终通知:无论代码是否有异常都会进行的操作

切面类:

//最终通知 
public void finallyAnn() {
	System.out.println("此句一定会执行");
}

配置增加:

<!-- 配置最终切面 -->
			<aop:after method="finallyAnn" pointcut-ref="pointcut04"/>

结果如下:
在这里插入图片描述
4.3 切入点表示式

语法:

(1)基于execution函数

(2)

[访问修饰符] 方法返回值 包名.类名.方法名(参数),如下所示

execution( public void com.spring4_AOP.demo01.ProductDaoImpl.save(..))

public void 可以省略,上例均省略,使用*代替,如下所示

execution(* com.spring4_AOP.demo01.ProductDaoImpl.save(..)

save(…)表示任意参数,可以拦截指定类的所有方法,如下所示:

execution(* 包名.类名.*(..))

五、AOP的注解开发

5.1 注解开发入门案列

jar同第四节相同。

配置文件applicationContext.xml,需开启注解开发

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:aop="http://www.springframework.org/schema/aop" xsi:schemaLocation="
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd"> <!-- bean definitions here -->

	<!-- 在配置文件中开启注解的AOP开发 -->
	<aop:aspectj-autoproxy />

	<!--配置目标类 -->
	<bean id="productDao" class="com.spring4_AOP.demo01.ProductDao">
	
	</bean>
	
	<!-- 配置切面类 -->
	<bean id="myAspect" class="com.spring4_AOP.demo01.MyAspectAnno">
	
	
	
	</bean>
</beans>

ProductDao.java

package com.spring4_AOP.demo01;

public class ProductDao {

	public void save() {
		System.out.println("保存订单");
	}
	public void update() {
		System.out.println("更新订单");
	}
	public void delete() {
		System.out.println("删除订单");
	} 
	public void find() {
		System.out.println("查询订单");
	}
}

切面类MyAspectAnno.java

package com.spring4_AOP.demo01;

import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;

/**
 * 注解方式的切面类
 * @author cf
 *
 */

@Aspect
public class MyAspectAnno {
	
	@Before(value = "execution(* com.spring4_AOP.demo01.ProductDao.save(..))")
	public void before() {
		System.out.println("前置通知。。。");
	}
}

测试类TestDemo01.java

package com.spring4_AOP.demo01;

import javax.annotation.Resource;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:applicationContext.xml")
public class TestDemo01 {

	@Resource(name="productDao")
	private ProductDao productDao;

	@Test
	public void demo01() {
		productDao.save();
		productDao.update();
		productDao.delete();
		productDao.find();
		
	}
}

结果如下:

在这里插入图片描述
5.2 注解的AOP通知类型

  • @Before : 前置通知

    入门案列为前置通知

  • @AfterReturning : 后置通知

MyAspectAnno.java添加后置通知方法

//后置通知
@AfterReturning(value = "execution(* com.spring4_AOP.demo01.ProductDao.delete(..))",returning="result")
public void afterReturning(Object result) {
	System.out.println("后置通知。。。文件被删除" + "---" + result);
}

运行结果如下:
在这里插入图片描述

  • @Around : 环绕

     //环绕通知
      @Around(value = "execution(* com.spring4_AOP.demo01.ProductDao.update(..))")
      public Object around(ProceedingJoinPoint jointPoint) throws Throwable {
      	System.out.println("环绕前");
      	
      	Object obj = jointPoint.proceed();
      	
      	System.out.println("环绕后");
      	return obj;
      }
    

结果:

在这里插入图片描述

  • @AfterThrowing

异常抛出

//异常抛出通知
@AfterThrowing(value = "execution(* com.spring4_AOP.demo01.ProductDao.find(..))")
public void afterThrowing() {
	System.out.println("异常抛出通知");
}
  • @After

最终通知

//最终通知
@After(value="execution(* com.spring4_AOP.demo01.ProductDao.find(..))")
public void after() {
	System.out.println("最终通知");
}
华为OD机考双机位C卷:精准核酸检测 (C/C++/Py/Java/Js/Go) 华为OD机试双机位C卷 精准核酸检测,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解。华为OD机试 - 精准核酸检测。 阅读详情

相关推荐

【Get深一度】小波分析概念1——紧支撑集是什么意思,通俗解释

最近学到小波,在仿真中也用到了紧支撑函数;紧支撑性越好,说明能量越集中;用最通俗的话来讲,紧支撑是这样的: 对于函数f(x),如果自变量x在 0附近的取值范围内,f(x)能取到 C; 而在此之外,f(x)取值为 0; 那么这个函数f(x)就是紧支

Trey_优快云 的优快云博客 8348

maven编译找不到包com.sun.*

maven编译时,无法加载com.sun.*

qq_27910247的博客 821

告别PlatformIO!用Arduino IDE搞定ESP32上的micro-ROS 2.0.5(Humble版)

本文详细介绍了如何从PlatformIO迁移到Arduino IDE以支持ESP32上的micro-ROS 2.0.5(Humble版)。内容涵盖环境配置、项目转换、常见问题解决及高级优化技巧,帮助开发者顺利过渡并充分利用Arduino IDE的官方支持优势。

weixin_33709590的博客 376

Java程序包不存在问题的解决办法

idea 操作

qq_33240556的博客 3万+

C#中的Chart控件——当数据源很多时可以显示进度条拉动观察,也可以记录到后台文本详细对照

C#中的Chart控件——当数据源很多时可以显示进度条拉动观察,也可以记录到后台文本详细对照下面进行详细步骤说明,感兴趣的同学可以看一下: 1简单示例(一条线): 2.数据源随着时间不断变化,进度条变化 。多条线: 3.看在整段时期内的数据大体图(消去或出现)进度条: 4.后台将时刻记录变化记录到一个txt文本里以供详细校验: 话不多说上码: using System; using Sys...

帅boy的博客 4308

从ST转国产ARM必看:GD32/APM32等5款芯片的SWD下载全攻略(含CH32特殊处理)

本文为从STM32转向国产ARM芯片的开发者提供了详细的SWD下载调试指南。针对GD32F103C8T6、APM32F103C8T6等五款热门国产芯片,详细说明了如何利用已有的ST-Link工具和Keil MDK环境进行程序烧录,并特别介绍了CH32F103芯片所需的独立器件库安装等特殊处理方法,帮助开发者实现平滑迁移,提升开发效率。

weixin_29195615的博客 278

解决 Maven package 命令报错程序包 sun.* 不存在

解决 Maven package 命令报错程序包 sun.* 不存在

李晋江的博客 9166

CVAT自动标注避坑指南:从nuctl安装到YOLOv5模型部署的完整流程

本文详细介绍了在CVAT中部署YOLOv5自动标注功能的完整流程与避坑指南。重点解决了从nuctl工具安装、项目创建时因网络问题导致的镜像拉取失败,到最终模型函数部署与CVAT集成的关键步骤。针对国内网络环境,提供了实用的镜像替换方案,帮助用户顺利完成基于CPU的自动化标注环境搭建。

pytorch8learner的博客 229

Maven编译项目显示 程序包com.sun.*包不存在 【原因及三种解决方案】

maven 编译时报错: [ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin: 程序包com.sun.…… 不存在 程序包com.sun.xml.internal.ws.spi不存在 【官方解释】:javac uses a special symbol table that does not include all Sun-proprietary classes.When javac is comp.

am_Sun的博客 6万+

2024年12月中国电子学会青少年软件编程(Python)等级考试试卷(五级)答案 + 解析

2024年12月中国电子学会青少年软件编程(Python)等级考试试卷(五级)答案 + 解析

伶俐角少儿编程 484

79-Halcon-- visualize_object_model_3d 函数功能(交互式3D可视化)

该算子是连接3D数据与决策者的关键可视化桥梁,通过其独特的交互能力和高质量的渲染效果,将复杂的3D信息转化为直观的可视内容,大幅提升工程决策效率和质量。操作符,不仅能在窗口中渲染3D对象,还支持多种交互操作,适用于调试、展示和交互分析场景。本解析将全面探讨其参数功能及工业级应用方案。+几何类型: PointCloud/ TriMesh/CAD。+法线属性: [NX,NY,NZ]+附加数据: Attributes。是Halcon中功能强大的。+顶点属性: [X,Y,Z]+颜色属性: [R,G,B]

weixin_45590420的博客 1205

java 程序包 sun.xxx不存在

如果看到这种sun.xxx不存在,先查看自己的jdk是不是用了11版本 都改成jdk1.8就好了

qflyIT的博客 5938

如何使用CPU-Z获取内存条频率信息(编程)

当我们需要获取计算机内存条的频率信息时,可以利用CPU-Z这个工具来实现。CPU-Z是一款专门用于获取计算机硬件信息的工具,它提供了API接口,我们可以通过编程的方式来获取内存条频率信息。你可以从CPU-Z官方网站下载适用于你的操作系统的CPU-Z程序,并从安装目录中找到。函数,我们可以初始化CPU-Z,如果返回值不为0,则表示初始化失败。函数来获取内存条频率信息,如果返回值小于等于0,则表示获取失败。函数来初始化CPU-Z并获取内存条频率信息。最后,我们将获取到的内存条频率信息打印输出,并使用。

ByteProwl的博客 456

Spring构造注入&注解注入&AOP

一、依赖注入 1.导包 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocatio...

Yuncoco的博客 1620

计算机控制技术及应用

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

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

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

Spring注解&Aop

Spring笔记有详细记录eclipse断网xml提示功能 细微区别如下图 使用注解需导入spring-aop-5.0.0.RELEASE.jar <?xml version="1.0" encoding="UTF-8"?> <beans xmlns:xsi="http://www.w3.org/2001/XMLSchema...

weixin_30877493的博客 79

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Spring注解&代理模式&AOP

文章目录Day40 Spring注解&代理模式&AOPSpirng注解什么是SpringSpring的两大核心编程思想依赖注入普通注入XML方式自动注入全注解注入@Autowired 与 @Resource的区别AOP代理模式分类AOP术语(了解)配置静态代理AOP的配置 Day40 Spring注解&代理模式&AOP Spirng注解 什么是Spring Spr...

风华流沙君莫笑的博客 486

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

Spring - 注解&代理模式&AOP

Spring - 注解 代理模式 AOP 一、Spring与导包 (一)Spring概述 轻量级的DI/IOC与AOP的容器框架 (二)BeanFactory与ApplicationContext的区别 ApplicationContext是BeanFactory的子类,它拥有更加强大的一些方法(邮件、国际化…),BeanFactory创建的Bean默认是懒加载,Applicat...

EstherLty的博客 324

Spring-注解&代理模式&AOP

Spring+SpringMVC+SpringDataJpa: 一.Spring的回顾 概述:Spring是一个轻量级的DI/IOC与AOP的容器框架 BeanFactory与ApplicationContext的区别? 都是接口,ApplicationContext是BeanFactory的子接口,拥有更多的功能与方法。ApplicationContext是在启动容器创建上下文环境的时候...

Aydxz的博客 458

构造注入&注解注入&AOP

构造注入 导入所需要的包 2.构造注入的方式 方式一:通过名称注入 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20191206092755157.png 方式二:索引值注入 方式三:通过类型注入 方式四:外部Bean引入 方式五:内部Bean引入 属性注入 1.简单属性注入 2.集合属性注入 > 3.数组 &...

Echouuu的博客 547

Spring-构造注入&注解注入&代理模式&AOP

Spring-构造注入&注解注入&代理模式&AOP 一、spring的依赖注入方式 什么叫做注入? 一个类里面依赖于另外一个类,然后spring把类的对象创建出来,然后注入到相应的类里面过程 1.普通的注入 1)普通 set方法注入 ​ setName(String name) <property name="name" value="xxxx"> 2.构造参...

sdadaada的博客 405

Spring 动态代理分析&AOP的XML的方式&注解方式

Spring的AOP开发AOP:面向切面编程。AOP出现是OOP(面向对象)的延伸,是OOP的扩展。解决OOP中的一些问题。 AOP取代传统的纵向继承体系,采用横向抽取机制。(解耦) AOP底层实现原理: aop底层实现就是利用了动态代理。 利用了动态代理的两种机制:JDK动态代理、CGlib动态代理。 两种代理区别:JDK动态

sinat_39789638的博客 766

【Spring4(二)】IOC注解&AOP

Spring 的IOC 的注解开发(*****) Spring的IOC的注解开发的入门 创建web项目,引入jar包 在Spring4的版本中,除了引入基本的开发包以外,还需要引入aop的包。 引入Spring的配置文件 在src下创建一个ApplicationContext.xml 引入约束:使用注解开发需要引入context约束。 约束:spring-framework-4.2.4....

风信子 267

Spring_构造注入&注解注入&代理模式&AOP

文章目录1 依赖注入1.1 依赖注入方式1.1.1 普通set注入1.2 数组注入1.3 List /Set Map 集合注入1.4 Properties 注入1.5 xml注入方式2 AOP2.1 什么是AOP2.2 AOP术语3 AOP实现3.1 添加aop命名空间3.2 前置增强(通知)3.3 环绕增强3.4 注解版4 AOP代理模式4.1静态与动态代理 1 依赖注入 概念: 一个类里面依赖...

Java_pipixia的博客 522

《Spring》实战——3.面向切面&AOP

Day_02 前言 在软件开发中,散布于应用中多处的功能被称为横切关注点(crosscutting concern)。通常来讲,这些横切关注点从概念上是与应用的业务逻辑相分离的(但是往往会直接嵌入到应用的业务逻辑之中)。 把这些横切关注点与业务逻辑相分离正是面向切面编程(AOP)所要解决的问题。DI有助于应用对象之间的解耦,而AOP可以实现横切关注点与它们所影响的对象之间的解耦; 1. AOP? AOP 即 Aspect Oriented Program 面向切面编程; 首先,在面向切

娜娜米的博客 389

Spring学习笔记2(IOC注解方式&AOP)

前言 Spring框架的学习路线: Spring第一天:Spring的IOC容器之XML的方式,Spring框架与Web项目整合 Spring第二天:Spring的IOC容器之注解的方式,Spring的AOP技术 Spring第三天:Spring的事务管理、Spring框架的JDBC模板 Spring第四天:SSH三大框架的整合 这是第二天学习大纲: 一、Spring框架的IOC基于注解...

weixin_34187822的博客 170

SpringBootWeb - 事务&AOP

我们接着继续学习@Transactional注解当中的第二个属性propagation,这个属性是用来配置事务的传播行为的。什么是事务的传播行为呢?就是当一个事务方法被另一个事务方法调用时,这个事务方法应该如何进行事务控制。例如:两个事务方法,一个A方法,一个B方法。在这两个方法上都添加了@Transactional注解,就代表这两个方法都具有事务,而在A方法当中又去调用了B方法。

weixin_45210565的博客 806
上一篇: Spring教程(一)--入门&基本配置
下一篇: Spring教程(三)--JDBC模板的使用
Double____C
博客等级 码龄8年 92粉丝 79原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值