Using Spring from Scratch

 

1. IOC - Inversion of Control 控制反转

IOC的基本概念是:不创建对象,但是描述创建它们的方式。在代码中不直接与对象和服务连接,但在配置文件中描述哪一个组件需要哪一项服务。容器负责将这些联系在一起。

 

2. AOP - Aspect Oriented Programming

意为:面向切面编程(也叫面向方面),可以通过预编译方式和运行期动态代理实现在不修改源代码的情况下给程序动态统一添加功能的一种技术。AOP实际是GoF设计模式的延续,设计模式孜孜不倦追求的是调用者和被调用者之间的解耦,AOP可以说也是这种目标的一种实现。

对业务逻辑的各个部分进行隔离, 从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。

 

3. 加载

3.1 FileSystemXmlApplicationContext

ApplicationContext context = new FileSystemXmlApplicationContext(
				new String[] { "src/services.xml" });

3.2 ClassPathXmlApplicationContext

ApplicationContext context = new ClassPathXmlApplicationContext(
		        new String[] {"services.xml"});

 

4. 配置文件 service里调用dao

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

  <bean id="userService" class="com.sam.service.UserService" lazy-init="true">
    <property name="userDao" ref="userDao" />
  </bean>
  
    <bean id="userDao" class="com.sam.dao.UserDaoImpl2">
    <!-- collaborators and configuration for this bean go here -->
  </bean>
  
  <!-- more bean definitions go here -->
</beans>

 

5. Annotation @命令的自动提示


 

6. Spring anotation的配置

配置文件(service中的dao不再需要setter,getter方法):

<?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-2.5.xsd
           http://www.springframework.org/schema/context
           http://www.springframework.org/schema/context/spring-context-2.5.xsd">               
     <context:annotation-config/>

     
	<bean id="userService" class="com.sam.service.UserService"></bean>
	<import resource="daos.xml" />
</beans>
   

类:

package com.sam.service;

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

import com.sam.dao.UserDao;

public class UserService {
	
	@Autowired

	public UserDao userDao;	
	
	public void save() {
		System.out.println("UserService saved!");
		
		userDao.save();
	}
}

 

7. Classpath scanning for managed components 零配置:

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-2.5.xsd
           http://www.springframework.org/schema/context
           http://www.springframework.org/schema/context/spring-context-2.5.xsd">
	<context:component-scan base-package="com.sam" />

</beans>

 DAO:

package com.sam.dao;

import org.springframework.stereotype.Repository;

@Repository

public class UserDao {
	public void save() {
		System.out.println("UserDao saved!");
	}
}

 Service:

package com.sam.service;

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

import com.sam.dao.UserDao;

@Service

public class UserService {
	
	@Autowired
	public UserDao userDao;	
	
	public void save() {
		System.out.println("UserService saved!");		
		userDao.save();
	}
}
 

8. PropertyEditors

好像蛮重要的,有空看一下

 

9. Chapter 6. Aspect Oriented Programming with Spring

AOP的注解的配置:

<?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"
	xmlns:aop="http://www.springframework.org/schema/aop"
	xsi:schemaLocation="http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
           http://www.springframework.org/schema/context
           http://www.springframework.org/schema/context/spring-context-2.5.xsd
           http://www.springframework.org/schema/aop
           http://www.springframework.org/schema/aop/spring-aop-2.5.xsd">
	<context:annotation-config />
	<context:component-scan base-package="com.sam" />
	<aop:aspectj-autoproxy/>
</beans>

Java类的配置:

package com.sam.aop;

import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.springframework.stereotype.Component;

@Aspect
@Component
public class LogInterceptor{	
	@Before("execution(public void com.sam.dao.UserDaoImpl2.userSaved())")
	public void beforeMethod() {
		System.out.println("m started.");
	}
}

 第一次运行报错,缺少类,加入如下3个包解决问题:

Spring_lib_with_dependency\aspectj\aspectjrt.jar

Spring_lib_with_dependency\aspectj\aspectjweaver.jar

Spring_lib_with_dependency\aopalliance\aopalliance.jar

 

类继承了接口,可以自动由jdk的InvocationHandler来实现代理。

类没有接口,需要加入cglib来实现。

 

AOP 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"
	xmlns:aop="http://www.springframework.org/schema/aop"
	xsi:schemaLocation="http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
           http://www.springframework.org/schema/context
           http://www.springframework.org/schema/context/spring-context-2.5.xsd
           http://www.springframework.org/schema/aop
           http://www.springframework.org/schema/aop/spring-aop-2.5.xsd">
	<context:annotation-config />
	<context:component-scan base-package="com.sam" />
	<bean id="logInterceptor" class="com.sam.aop.LogInterceptor" />
	<aop:config>
		<aop:pointcut expression="execution(public * com.sam.service..*.userSaved(..))"
			id="servicePointcut" />
		<aop:aspect id="logAspect" ref="logInterceptor">
			<aop:before method="beforeMethod" pointcut-ref="servicePointcut" />
		</aop:aspect>
	</aop:config>
</beans>

 

10. 配置datasource

    方式一: 直接写连接信息,用户名密码

 

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
    <property name="driverClassName" value="com.microsoft.sqlserver.jdbc.SQLServerDriver"/>
    <property name="url" value="jdbc:sqlserver://localhost:1433;DatabaseName=db"/>
    <property name="username" value="sam"/>
    <property name="password" value="sam"/>
</bean>
 

 

    方式二: 配JNDI

<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
   <!-- websphere -->
        <property name="jndiName" value="java:comp/env/jdbc/samproject" />
      <!--tomcat -->
        <property name="jndiName" value="jdbc/samproject" />
       
    </bean>

  在tomcat的service.xml配置

<Context docBase="samproject" path="/samproject" reloadable="true" debug="5" crossContext="true"
          source="org.eclipse.jst.j2ee.server:samproject">
      <Resource name="jdbc/samproject"
        auth="Container"
        type="javax.sql.DataSource"
        driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver"
        url="jdbc:sqlserver://localhost:1433;DatabaseName=db"
        username="sam"
        password="sam"
        maxActive="100"      
        maxIdle="30"      
        maxWait="10000" />      
      </Context>
    </Host>
 

 

 

11. 事务管理

<bean id="transactionManager"
		class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
		<property name="dataSource" ref="dataSource" />
	</bean>


	<tx:advice id="txAdvice" transaction-manager="transactionManager">
		<tx:attributes>
			<tx:method name="insert*" propagation="REQUIRED"
				rollback-for="java.lang.Exception" />
			<tx:method name="delete*" propagation="REQUIRED"
				rollback-for="java.lang.Exception" />
			<tx:method name="update*" propagation="REQUIRED"
				rollback-for="java.lang.Exception" />
			<tx:method name="*" read-only="false"/>
		</tx:attributes>
	</tx:advice>



	<aop:config>
		<aop:pointcut id="serviceMethod"
			expression="execution(* com.sam.service..*.*(..))" />
		<aop:advisor advice-ref="txAdvice" pointcut-ref="serviceMethod" />
	</aop:config>
 

 

 

 

最后保留行

 

 

Scratch图形化编程实战:初音未来互动项目开发指南 图形化编程是计算机科学教育的重要入门方式,它通过拖拽积木块的方式,让学习者直观理解程序逻辑与事件驱动原理。这种技术降低了编程门槛,特别适合培养逻辑思维和创造力。在工程实践中,图形化编程常被用于快速原型开发、教育演示和兴趣创作,其核心价值在于将抽象算法转化为可视化的交互体验。以Scratch平台为例,结合热门的二次元文化元素如初音未来,可以设计出包含角色动画、声音播放和交互反馈的完整项目。这类项目不仅涉及变量控制、消息广播等编程概念,还能通过模拟“点赞、关注、收藏”等互动机制,让学习者在实践中掌握事件响应与状 阅读详情

相关推荐

用Makey Makey与Scratch制作低成本互动教具:社交音节活动板实践指南

辅助技术通过硬件与软件的结合,为特殊教育及个性化学习提供了创新解决方案。其核心原理在于利用传感器、微控制器等硬件捕捉用户交互,并通过编程实现定制化的反馈与控制,从而创造可访问、高参与度的学习环境。在教育技术领域,这种技术价值体现在能以低成本构建强互动、多感官的学习工具,有效补偿特定学习者的感知通道局限,提升学习动机与效果。典型的应用场景包括为听障学生设计发音训练工具、为多动症儿童开发专注力训练游戏,或为所有学习者创建动手探究的STEM项目。本文聚焦于一个具体案例——社交音节活动板,它巧妙运用Makey Ma

weixin_33727510的博客 333

【Spring】Spring的创建和使用

Spring的创建和使用——内含经典面试题

潘潘的博客 480

青少年编程 中国电子学会scratch等级考试二级历年真题解析【持续更新 已更新至2024年12月】_中国电子学会青少年等级考试历年考题

面试题文档来啦,内容很多,485页!由于笔记的内容太多,没办法全部展示出来,下面只截取部分内容展示。

2301_82243799的博客 1049

【译】Using Spring Boot

【已完成】本文大部分内容翻译自官方文档https://docs.spring.io/spring-boot/docs/2.2.5.RELEASE/reference/html/using-spring-boot.html 文章目录1. Spring Boot的诞生2. 怎么使用Spring Boot2.1 环境要求2.2 构建系统2.2.1 配置spring-boot-starter-pare...

ShrMus的博客 371

Delphi开发者必备:CEF4Delphi跨平台浏览器嵌入实战指南(含Lazarus适配)

本文详细介绍了Delphi开发者如何利用CEF4Delphi实现跨平台浏览器嵌入,包括环境配置、Lazarus适配、ARM架构优化及Firemonkey集成等实战技巧。通过Chromium引擎的强大功能,开发者可以轻松为传统桌面应用添加现代浏览器特性,提升多平台开发效率。

weixin_29233333的博客 230

Palabos 并行计算与多物理场模拟实战指南

本文详细介绍了Palabos在并行计算与多物理场模拟中的实战应用。作为基于C++和LBM的开源CFD工具,Palabos通过MPI实现高效并行计算,特别适合处理复杂流体模拟问题。文章涵盖从基础安装、多物理场耦合技巧到性能优化策略,并分享工业级应用案例与调试经验,帮助开发者快速掌握这一强大工具。

4k5l6j7h8的博客 245

spring boot官方文档 2.2.6 Using Spring Boot

Using Spring Boot1. Build Systems,构建项目1.1. Dependency Management 依赖管理1.2. Maven1.2.1. Inheriting the Starter Parent1.2.2. Using Spring Boot without the Parent POM1.2.3. Using the Spring Boot Maven Plu...

weixin_41705396的博客 1332

数据分析:美团大赛的具体案例制作

在数据集中,存在三个变量的经纬度数据,分别是商家的经纬度数据('sender_lng', 'sender_lat'),顾客的经纬度数据('recipient_lng', 'recipient_lat')和骑手的经纬度数据('grab_lng', 'grab_lat')。根据结果可知,平台订单创建时间的中位数为2022-10-21 02:59:01,平台订单创建时间的众数为2022-10-19 03:29:41、2022-10-23 03:29:47,与直方图相符。接下来,我们对是否为预定订单变量进行分析。

m0_68269346的博客 2501

基于Java的scratch学习网站系统的设计与实现

Java简介Java是一种面向对象的静态式编程语言。Java编程语言具有多线程和对象定向的特点。其特点是根据方案的属性将方案分为几个不同的模块,这些模块是封闭的和多样化的,在申请过程中具有很强的独立性。Java语言在计算机软件开发过程中的运用可以达到交互操作的目的,通过各种形式的交换,可以有效地处理所需的数据,从而确保计算机软件开发的可控性和可见性。开发java语言时,保留了网络接口,Java保留的缺省网络接口可以与web应用程序编程所依赖的类别库相匹配。

yh1340327157的博客 703

从DWS到设备树:MTK平台LK阶段GPIO初始化的隐秘路径与调试实战

本文深入探讨了MTK平台LK阶段GPIO初始化的完整流程,揭示了从DWS配置到设备树生成的隐秘转换路径。通过分析MT6768等平台的启动框架,提供了针对preloader到LK阶段GPIO初始化异常的实战调试方法与最佳实践,帮助开发者有效解决硬件与软件配置不匹配的常见问题。

h9j8k7l6m5n的博客 1003

IP路由原理、静态路由及动态路由区分

什么是路由 路由是指导IP报文发送的路径信息。 直连路由:目的地所在网络与路由器直接相连。 间接路由:目的地所在网络与路由器非直接相连。 静态路由是由管理员手工配置而生成的路由。 动态路由路由器使用路由协议从其他路由器那里获悉的路由。

weixin_42227328的博客 5471

5分钟快速上手Scratch 3.0图形界面开发:从零到项目运行完整指南

想要快速掌握**Scratch GUI开发**并构建自己的可视化编程界面吗?Scratch 3.0图形用户界面是一个功能强大的React组件库,专门用于创建和运行Scratch项目。无论你是教育科技开发者、前端工程师,还是想要定制编程学习平台的创作者,这个开源项目都能为你提供完整的解决方案。 ## 🚀 为什么选择Scratch GUI项目? Scratch GUI不仅仅是MIT开发的知名儿童

gitblog_00710的博客 699

【Matlab】matlab代码实现迭代学习控制

该文介绍了在Matlab中实现迭代学习控制(ILC)的方法。ILC通过利用历史轨迹数据来优化重复任务的控制性能。文章提供了一个步进电机控制示例,包括:1)定义正弦轨迹;2)设置100次迭代和0.1学习率;3)建立二阶系统模型;4)执行ILC算法计算控制输入;5)绘制期望轨迹与实际输出的对比图。该示例展示了ILC的基本实现过程,并指出实际应用可能需要更复杂的设计。代码演示了误差计算、控制输入更新和结果可视化等关键步骤。

unber的博客 202

java毕业设计-基于Java的scratch少儿编程学习网站系统的设计与实现,基于spring的scratch少儿编程学习网站系统的设计与实现(源码+LW+部署文档+全bao+远程调试+代码讲解等)

java毕业设计-基于Java的scratch少儿编程学习网站系统的设计与实现,基于spring的scratch少儿编程学习网站系统的设计与实现(源码+LW+部署文档+全bao+远程调试+代码讲解等)

1009

SAP 关于替代料物料混用问题处理方案简介

电子料很多都是需要进行替代的,并且需要考虑当A物料库存不足时,需要考虑B物料的库存来满足需求,当需求不满足的时候也需要考虑物料的价格因素,同时考虑价格低的物料进行采购。3、还遇到过比较奇葩的处理替代料的解决方案就是将SAP系统中的需求数据用接口的方式全部传输到外围系统,同时还将所有物料的库存信息都通过接口的方式传输到外围系统中,然后通过外围系统进行替代料逻辑的处理,然后在回写回SAP更改BOM中的优先级,然后在重新下单,貌似解决了替代料的问题,但是好像又没有解决。时间:2024-01-27。

我小时候很黑的博客 2353

AI金融投资002:批量下载巨潮资讯基金招募说明书

封闭式基础设施证券投资基金招募说明书 AI金融投资002:批量下载巨潮资讯基金招募说明书

LuckyHanMo的博客 2200

TIOBE 4 月榜单:少儿编程语言 Scratch 进入 TOP 20

转存失败重新上传取消 TIOBE 最近公布了2020年4月编程语言排行榜啦,你们看了吗? 四月榜单Scratch、SQL、Go、Swift 和 R 语言等有明显的上升趋势!但不可思议的是这个旨在教育孩子的编程语言—— Scratch 竟然在本月进入了 TIOBE 指数前 20! 对于这个疑惑,TIOBE的的软件首席执行官Paul Jansen 给我们做...

人邮异步社区 827

计算机控制技术及应用

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

ReAct模式实战:AI Agents From Scratch教你构建会思考的智能代理

在人工智能领域,构建能够自主思考和解决复杂问题的智能代理一直是开发者追求的目标。**AI Agents From Scratch**项目通过从零开始实现ReAct模式,为开发者提供了理解和构建会思考的智能代理的完整路径。本教程将深入解析ReAct模式的核心原理,展示如何通过该项目快速上手构建自己的智能代理,让AI从简单的问答工具进化为具备推理能力的问题解决专家。 ## 什么是ReAct模式?让A

gitblog_01167的博客 960

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

假人有限元模型

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

蓝桥杯Scratch国赛真题解析:从能力地图到计算思维的进阶指南

图形化编程是青少年接触计算机科学和计算思维的重要入口,它通过拖拽积木块的方式,将抽象的编程逻辑可视化,降低了学习门槛。其核心原理在于将复杂的程序指令封装成直观的模块,通过事件驱动和消息广播等机制,实现角色间的交互与协同。掌握图形化编程不仅能培养逻辑思维和问题分解能力,其蕴含的算法思想与系统设计理念,更是未来学习任何高级编程语言的坚实基础。在工程实践中,这种能力尤其体现在对多角色协同、状态管理和克隆体应用等复杂场景的驾驭上。本文以蓝桥杯Scratch竞赛为具体场景,深入剖析如何通过真题拆解,构建从逻辑启蒙到系

weixin_33895695的博客 331

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

Scratch青蛙王子国赛真题解析:从碰撞检测到广播消息的完整编程思维

在青少年编程教育中,事件驱动与逻辑控制是构建交互程序的核心基础。其原理在于通过用户输入或条件触发来改变程序状态,实现角色响应与流程管理。掌握这一机制的技术价值在于能够系统化地设计游戏逻辑与交互反馈,是培养计算思维的关键环节。在Scratch图形化编程中,这尤其体现在游戏开发与动画故事创作等应用场景。本文以蓝桥杯国赛热门题目“青蛙王子”为例,深入剖析如何运用碰撞检测机制实现精确的物理交互,并通过广播消息进行模块化的事件管理,从而构建健壮且可扩展的项目结构。这两个热词技术点的结合,为解决复杂编程问题提供了清晰的

weixin_33836874的博客 513

Scratch拼图游戏开发:从事件驱动到克隆体管理的实战解析

事件驱动编程是图形化编程和游戏开发中的核心概念,它通过响应用户操作(如点击、拖动)来触发程序执行流程,是实现交互式应用的基础。其原理在于监听输入事件并调用对应的处理函数,这种模式能有效提升程序的响应性和模块化程度。在技术价值上,掌握事件驱动有助于培养逻辑思维和问题分解能力,尤其适用于教育编程和快速原型开发。在应用场景中,常见于游戏开发、互动教学软件和儿童编程教育等领域。本文以Scratch克隆体技术为核心,结合坐标控制和逻辑判断,深入剖析如何实现一个完整的拼图游戏,涵盖从素材处理、角色初始化到交互逻辑的全过

weixin_34099526的博客 397

springboot基于Java的scratch学习网站系统的设计与实现

我是一名资深的高级程序员,在编程的世界里已深耕多年。对 Java 语言有着深入的理解和熟练的运用,无论是复杂的业务逻辑处理还是高效的性能优化,都能轻松驾驭。Spring Boot 框架是我手中的强大武器,凭借对其核心原理的透彻掌握,我能够快速构建出稳定、可靠且可扩展的后端应用。从项目的初始化到功能的逐步完善,我能精准地运用自动配置、起步依赖等特性,大大提高开发效率。

weixin_63671835的博客 938

SpringBoot基于Java的scratch学习网站系统的设计与实现

Java编程语言Java作为计算机领域中极具影响力的编程语言,自诞生以来便以其独特的优势在众多技术方向上大放异彩。它基于类和对象的概念,通过封装、继承和多态等特性,为构建复杂的软件系统提供了坚实的基础,有力地支持了面向对象的软件开发方法,使代码的组织和复用更加高效。其丰富的API 涵盖了从基本数据结构到网络通信、图形用户界面、数据库连接等各个方面,极大地简化了开发过程,降低了开发成本。

四金同学的博客 732
上一篇: wget 测试webservice
下一篇: 到美国带什么
O2AtomLife
博客等级 码龄19年 2粉丝 82原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值