Spring核心编程思想(五)Spring 特性总览之Spring 编程模型

《小马哥讲Spring核心编程思想》-第一章学习笔记(1) 《小马哥讲Spring核心编程思想》-第一章学习笔记(1)一、课程介绍1、为什么要学习spring?2、深入学习spring的难点有哪些?3、课程的设计思路是怎样的?二、内容综述三、课前准备三、特性总览四、Spring版本特性五、Spring 模块化设计六、Spring 对 Java 语言特性运用Java语法变化Spring 对 Java 语言特性运用Java 5 语法特性Java 6 语法特性Java 7 语法特性Java 8 语法特性Spring 对 JDK API 实践Spring 对 Java EE 阅读详情

小马克课程笔记

Spring 对 Java EE API 整合

  • Java EE Web 技术相关
JSR 规范Spring 支持版本代表实现
Servlet + JSP(JSR 035)1.0 +DispatcherServlet
JSTL(JSR 052)1.0 +JstlView
JavaServer Faces(JSR 127)1.1 +FacesContextUtils
Portlet(JSR 168)2.0 - 4.2DispatcherPortlet
SOAP(JSR 067)2.5 +SoapFaultException
WebServices(JSR 109)2.5 +CommonAnnotationBeanPostProcessor
WebSocket(JSR 356)4.0 +WebSocketHandler
  • Java EE 数据存储相关
JSR 规范Spring 支持版本代表实现
JDO(JSR 12)1.0 - 4.2JdoTemplate
JTA(JSR 907)1.0 +JtaTransactionManager
JPA(EJB 3.0 JSR 220的成员)2.0 +JpaTransactionManager
Java Caching API(JSR 107)3.2 +JCacheCache
  • Java EE Bean 技术相关
JSR 规范Spring 支持版本代表实现
JMS(JSR 914)1.1 + JmsTemplate
EJB 2.0 (JSR 19)1.0 + AbstractStatefulSessionBean
Dependency Injection for Java(JSR 330)2.5 +AutowiredAnnotationBeanPostProcessor
Bean Validation(JSR 303)3.0 +LocalValidatorFactoryBean

Spring 编程模型

在这里插入图片描述

面向对象

契约接口

  • Aware
    • 这是一种模式 Aware前面是类型
    • 会注入ApplicationContext 同理BeanFactoryAware也是一样
    • 这是一种接口的方式,称为Aware接口回调
      • 每当Bean实现这样一种接口的时候会回调一个对象(ApplicationContext 、BeanFactory)
 * @author Rod Johnson
 * @author Juergen Hoeller
 * @author Chris Beams
 * @see ResourceLoaderAware
 * @see ApplicationEventPublisherAware
 * @see MessageSourceAware
 * @see org.springframework.context.support.ApplicationObjectSupport
 * @see org.springframework.beans.factory.BeanFactoryAware
 */
public interface ApplicationContextAware extends Aware {

	/**
	 * Set the ApplicationContext that this object runs in.
	 * Normally this call will be used to initialize the object.
	 * <p>Invoked after population of normal bean properties but before an init callback such
	 * as {@link org.springframework.beans.factory.InitializingBean#afterPropertiesSet()}
	 * or a custom init-method. Invoked after {@link ResourceLoaderAware#setResourceLoader},
	 * {@link ApplicationEventPublisherAware#setApplicationEventPublisher} and
	 * {@link MessageSourceAware}, if applicable.
	 * @param applicationContext the ApplicationContext object to be used by this object
	 * @throws ApplicationContextException in case of context initialization errors
	 * @throws BeansException if thrown by application context methods
	 * @see org.springframework.beans.factory.BeanInitializationException
	 */
	void setApplicationContext(ApplicationContext applicationContext) throws BeansException;

}

  • BeanPostProcessor
    • 这是一个关于Bean生命周期的后置处理
    • 在这里spring使用了default的java8的实现直接返回了,也就是不对Bean做任何处理和扩展
    • 所以这里我们可以覆盖
public interface BeanPostProcessor {
    @Nullable
    default Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
        return bean;
    }

    @Nullable
    default Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
        return bean;
    }
}

设计模式

  • 观察者模式
    • ApplicationEvent
public abstract class ApplicationEvent extends EventObject {

	/** use serialVersionUID from Spring 1.2 for interoperability. */
	private static final long serialVersionUID = 7099057708183571937L;

	/** System time when the event happened. */
	private final long timestamp;


	/**
	 * Create a new {@code ApplicationEvent}.
	 * @param source the object on which the event initially occurred or with
	 * which the event is associated (never {@code null})
	 */
	public ApplicationEvent(Object source) {
		super(source);
		this.timestamp = System.currentTimeMillis();
	}


	/**
	 * Return the system time in milliseconds when the event occurred.
	 */
	public final long getTimestamp() {
		return this.timestamp;
	}

}

ApplicationEvent 基于java的标准事件EventObject

public class EventObject implements java.io.Serializable {

    private static final long serialVersionUID = 5516075349620653480L;

    /**
     * The object on which the Event initially occurred.
     */
    protected transient Object  source;

    /**
     * Constructs a prototypical Event.
     *
     * @param    source    The object on which the Event initially occurred.
     * @exception  IllegalArgumentException  if source is null.
     */
    public EventObject(Object source) {
        if (source == null)
            throw new IllegalArgumentException("null source");

        this.source = source;
    }

    /**
     * The object on which the Event initially occurred.
     *
     * @return   The object on which the Event initially occurred.
     */
    public Object getSource() {
        return source;
    }

    /**
     * Returns a String representation of this EventObject.
     *
     * @return  A a String representation of this EventObject.
     */
    public String toString() {
        return getClass().getName() + "[source=" + source + "]";
    }
}

  • 有一个简单的实现
  • 通过事件的方式让监听器进行状态的回调
public class SimpleApplicationEventMulticaster extends AbstractApplicationEventMulticaster {

	@Nullable
	private Executor taskExecutor;

	@Nullable
	private ErrorHandler errorHandler;
	
	@Override
	public void multicastEvent(ApplicationEvent event) {
		multicastEvent(event, resolveDefaultEventType(event));
	}

	@Override
	public void multicastEvent(final ApplicationEvent event, @Nullable ResolvableType eventType) {
		ResolvableType type = (eventType != null ? eventType : resolveDefaultEventType(event));
		Executor executor = getTaskExecutor();
		for (ApplicationListener<?> listener : getApplicationListeners(event, type)) {
			if (executor != null) {
				executor.execute(() -> invokeListener(listener, event));
			}
			else {
				invokeListener(listener, event);
			}
		}
	}

}

@FunctionalInterface
public interface ApplicationListener<E extends ApplicationEvent> extends EventListener {

	/**
	 * Handle an application event.
	 * @param event the event to respond to
	 */
	void onApplicationEvent(E event);

}
  • 组合模式
    • CompositeCacheManager
      • 实现了CacheManager而后组合了更多成员List<CacheManager> cacheManagers
      • 此处是多个缓存合并后按照同一个处理方式进行处理
public class CompositeCacheManager implements CacheManager, InitializingBean {

	private final List<CacheManager> cacheManagers = new ArrayList<>();

	private boolean fallbackToNoOpCache = false;
}
  • 模板模式
    • JdbcTemplate
public class JdbcTemplate extends JdbcAccessor implements JdbcOperations {
    private static final String RETURN_RESULT_SET_PREFIX = "#result-set-";
    private static final String RETURN_UPDATE_COUNT_PREFIX = "#update-count-";
    private boolean ignoreWarnings = true;
    private int fetchSize = -1;
    private int maxRows = -1;
    private int queryTimeout = -1;
    private boolean skipResultsProcessing = false;
    private boolean skipUndeclaredResults = false;
    private boolean resultsMapCaseInsensitive = false;
    @Nullable
    public <T> T execute(ConnectionCallback<T> action) throws DataAccessException {
        Assert.notNull(action, "Callback object must not be null");
        Connection con = DataSourceUtils.getConnection(this.obtainDataSource());

        Object var10;
        try {
            Connection conToUse = this.createConnectionProxy(con);
            var10 = action.doInConnection(conToUse);
        } catch (SQLException var8) {
            String sql = getSql(action);
            DataSourceUtils.releaseConnection(con, this.getDataSource());
            con = null;
            throw this.translateException("ConnectionCallback", sql, var8);
        } finally {
            DataSourceUtils.releaseConnection(con, this.getDataSource());
        }

        return var10;
    }
    
    @Nullable
    public <T> T execute(StatementCallback<T> action) throws DataAccessException {
        Assert.notNull(action, "Callback object must not be null");
        Connection con = DataSourceUtils.getConnection(this.obtainDataSource());
        Statement stmt = null;

        Object var11;
        try {
            stmt = con.createStatement();
            this.applyStatementSettings(stmt);
            T result = action.doInStatement(stmt);
            this.handleWarnings(stmt);
            var11 = result;
        } catch (SQLException var9) {
            String sql = getSql(action);
            JdbcUtils.closeStatement(stmt);
            stmt = null;
            DataSourceUtils.releaseConnection(con, this.getDataSource());
            con = null;
            throw this.translateException("StatementCallback", sql, var9);
        } finally {
            JdbcUtils.closeStatement(stmt);
            DataSourceUtils.releaseConnection(con, this.getDataSource());
        }

        return var11;
    }
}

对象继承

  • 很多Abstract*抽象类
  • 例如AbstractApplicationContext 、AbstractBeanFactory 有很多继承实现类
public abstract class AbstractApplicationContext extends DefaultResourceLoader
		implements ConfigurableApplicationContext {}
		
public abstract class AbstractBeanFactory extends FactoryBeanRegistrySupport 
		implements ConfigurableBeanFactory {}

面向切面

动态代理

  • JdkDynamicAopProxy 代理了AopProxy
final class JdkDynamicAopProxy implements AopProxy, InvocationHandler, Serializable {
	private static final long serialVersionUID = 5531744639992436476L;
    private static final Log logger = LogFactory.getLog(JdkDynamicAopProxy.class);
    private final AdvisedSupport advised;
    private boolean equalsDefined;
    private boolean hashCodeDefined;

    public JdkDynamicAopProxy(AdvisedSupport config) throws AopConfigException {
        Assert.notNull(config, "AdvisedSupport must not be null");
        if (config.getAdvisors().length == 0 && config.getTargetSource() == AdvisedSupport.EMPTY_TARGET_SOURCE) {
            throw new AopConfigException("No advisors and no TargetSource specified");
        } else {
            this.advised = config;
        }
    }

    public Object getProxy() {
        return this.getProxy(ClassUtils.getDefaultClassLoader());
    }

}

public interface AopProxy {
    Object getProxy();

    Object getProxy(@Nullable ClassLoader var1);
}

字节码提升

  • AopProxy的多种实现之CglibAopProxy
    • 这是Spring为了保证版本稳定性将Cglib内联进自己核心框架中了(asm自动资源管理也是类似的方式)
    • asm是Cglib的基础,是对java字节码的类似于汇编一样的操作
lass CglibAopProxy implements AopProxy, Serializable {
    private static final int AOP_PROXY = 0;
    private static final int INVOKE_TARGET = 1;
    private static final int NO_OVERRIDE = 2;
    private static final int DISPATCH_TARGET = 3;
    private static final int DISPATCH_ADVISED = 4;
    private static final int INVOKE_EQUALS = 5;
    private static final int INVOKE_HASHCODE = 6;
    protected static final Log logger = LogFactory.getLog(CglibAopProxy.class);
    private static final Map<Class<?>, Boolean> validatedClasses = new WeakHashMap();
    protected final AdvisedSupport advised;
    @Nullable
    protected Object[] constructorArgs;
    @Nullable
    protected Class<?>[] constructorArgTypes;
    private final transient CglibAopProxy.AdvisedDispatcher advisedDispatcher;
    private transient Map<Method, Integer> fixedInterceptorMap = Collections.emptyMap();
    private transient int fixedInterceptorOffset;

    public CglibAopProxy(AdvisedSupport config) throws AopConfigException {
        Assert.notNull(config, "AdvisedSupport must not be null");
        if (config.getAdvisors().length == 0 && config.getTargetSource() == AdvisedSupport.EMPTY_TARGET_SOURCE) {
            throw new AopConfigException("No advisors and no TargetSource specified");
        } else {
            this.advised = config;
            this.advisedDispatcher = new CglibAopProxy.AdvisedDispatcher(this.advised);
        }
    }
}

面向元编程

注解

  • Component (组件)注解
  • 被ComponentScan注解或者相应注解扫描到会变成一个Bean

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Indexed
public @interface Component {
    String value() default "";
}

@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE})
@Documented
@Repeatable(ComponentScans.class)
public @interface ComponentScan {
    @AliasFor("basePackages")
    String[] value() default {};

    @AliasFor("value")
    String[] basePackages() default {};

    Class<?>[] basePackageClasses() default {};

    Class<? extends BeanNameGenerator> nameGenerator() default BeanNameGenerator.class;

    Class<? extends ScopeMetadataResolver> scopeResolver() default AnnotationScopeMetadataResolver.class;

    ScopedProxyMode scopedProxy() default ScopedProxyMode.DEFAULT;

    String resourcePattern() default "**/*.class";

    boolean useDefaultFilters() default true;

    ComponentScan.Filter[] includeFilters() default {};

    ComponentScan.Filter[] excludeFilters() default {};

    boolean lazyInit() default false;

    @Retention(RetentionPolicy.RUNTIME)
    @Target({})
    public @interface Filter {
        FilterType type() default FilterType.ANNOTATION;

        @AliasFor("classes")
        Class<?>[] value() default {};

        @AliasFor("value")
        Class<?>[] classes() default {};

        String[] pattern() default {};
    }
}

  • Component 的派生类Repository (Service和Controller等也是这种方式)
    • 标注了@Component就意味着Repository 等同于Component
    • 进行标注是因为注解没有继承关系所以只能进行源标注
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Component
public @interface Repository {

	/**
	 * The value may indicate a suggestion for a logical component name,
	 * to be turned into a Spring bean in case of an autodetected component.
	 * @return the suggested component name, if any (or empty String otherwise)
	 */
	@AliasFor(annotation = Component.class)
	String value() default "";

}

配置

  • Profiles可以认为是不同的用户配置对不同的系统来进行区分例如(dev sit uat pod)
public interface Environment extends PropertyResolver {
    String[] getActiveProfiles();

    String[] getDefaultProfiles();

    /** @deprecated */
    @Deprecated
    boolean acceptsProfiles(String... var1);

    boolean acceptsProfiles(Profiles var1);
}

  • 属性(数据源来自于多个PropertySource )
public interface PropertyResolver {
    boolean containsProperty(String var1);

    @Nullable
    String getProperty(String var1);

    String getProperty(String var1, String var2);

    @Nullable
    <T> T getProperty(String var1, Class<T> var2);

    <T> T getProperty(String var1, Class<T> var2, T var3);

    String getRequiredProperty(String var1) throws IllegalStateException;

    <T> T getRequiredProperty(String var1, Class<T> var2) throws IllegalStateException;

    String resolvePlaceholders(String var1);

    String resolveRequiredPlaceholders(String var1) throws IllegalArgumentException;
}

  • PropertySource
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Repeatable(PropertySources.class)
public @interface PropertySource {

	/**
	 * Indicate the name of this property source. If omitted, a name will
	 * be generated based on the description of the underlying resource.
	 * @see org.springframework.core.env.PropertySource#getName()
	 * @see org.springframework.core.io.Resource#getDescription()
	 */
	String name() default "";

	/**
	 * Indicate the resource location(s) of the properties file to be loaded.
	 * <p>Both traditional and XML-based properties file formats are supported
	 * &mdash; for example, {@code "classpath:/com/myco/app.properties"}
	 * or {@code "file:/path/to/file.xml"}.
	 * <p>Resource location wildcards (e.g. *&#42;/*.properties) are not permitted;
	 * each location must evaluate to exactly one {@code .properties} resource.
	 * <p>${...} placeholders will be resolved against any/all property sources already
	 * registered with the {@code Environment}. See {@linkplain PropertySource above}
	 * for examples.
	 * <p>Each location will be added to the enclosing {@code Environment} as its own
	 * property source, and in the order declared.
	 */
	String[] value();

	/**
	 * Indicate if failure to find the a {@link #value() property resource} should be
	 * ignored.
	 * <p>{@code true} is appropriate if the properties file is completely optional.
	 * Default is {@code false}.
	 * @since 4.0
	 */
	boolean ignoreResourceNotFound() default false;

	/**
	 * A specific character encoding for the given resources, e.g. "UTF-8".
	 * @since 4.3
	 */
	String encoding() default "";

	/**
	 * Specify a custom {@link PropertySourceFactory}, if any.
	 * <p>By default, a default factory for standard resource files will be used.
	 * @since 4.3
	 * @see org.springframework.core.io.support.DefaultPropertySourceFactory
	 * @see org.springframework.core.io.support.ResourcePropertySource
	 */
	Class<? extends PropertySourceFactory> factory() default PropertySourceFactory.class;

}

泛型

  • GenericTypeResolver
public final class GenericTypeResolver {
    private static final Map<Class<?>, Map<TypeVariable, Type>> typeVariableCache = new ConcurrentReferenceHashMap();

    private GenericTypeResolver() {
    }
}
public interface TypeVariable<D extends GenericDeclaration> 
		extends Type, AnnotatedElement {
}
  • ResolvableType
    • 有示例如何获取泛型
public class ResolvableType implements Serializable {
}

在这里插入图片描述

函数驱动

函数接口

  • 有且仅有一个抽象方法,排除掉Object里面的equals,hashCode方法以及一些default实现,此时无论标注或者不标注@FunctionalInterface 都可以认为是函数接口
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface FunctionalInterface {}

  • 例如
@FunctionalInterface
public interface ApplicationListener<E extends ApplicationEvent> extends EventListener {

	/**
	 * Handle an application event.
	 * @param event the event to respond to
	 */
	void onApplicationEvent(E event);

}

Reactive

  • Reactive的实现框架Reactor
  • 编程框架 Mono、Flux
    • Mono可以简单认为是个单一对象(0或者1个)
    • Flux是个集合对象
public abstract class Mono<T> implements CorePublisher<T> {
    static final BiPredicate EQUALS_BIPREDICATE = Object::equals;

    public Mono() {
    }
}

public abstract class Flux<T> implements CorePublisher<T> {
    static final BiFunction TUPLE2_BIFUNCTION = Tuples::of;
    static final Supplier LIST_SUPPLIER = ArrayList::new;
    static final Supplier SET_SUPPLIER = HashSet::new;
    static final BooleanSupplier ALWAYS_BOOLEAN_SUPPLIER = () -> {
        return true;
    };
    static final BiPredicate OBJECT_EQUAL = Object::equals;
    static final Function IDENTITY_FUNCTION = Function.identity();

    public Flux() {
    }
}

模块驱动

  • Enable
    • 例如EnableCaching 激活整个缓存部分
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Import(CachingConfigurationSelector.class)
public @interface EnableCaching {
}
  • EnableTransactionManagement 激活整个事务相关模块
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Import({TransactionManagementConfigurationSelector.class})
public @interface EnableTransactionManagement {
    boolean proxyTargetClass() default false;

    AdviceMode mode() default AdviceMode.PROXY;

    int order() default 2147483647;
}
  • EnableWebMvc激活WebMVC
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE})
@Documented
@Import({DelegatingWebMvcConfiguration.class})
public @interface EnableWebMvc {
}

  • EnableWebFlux 激活WebFlux
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE})
@Documented
@Import({DelegatingWebFluxConfiguration.class})
public @interface EnableWebFlux {
}
2025华为OD机试真题+全流程解析+备考攻略+面试技巧+机考经验分享+Java/python/JS/C++/C语言实现 本专栏包含华为 OD 机试最新的 A卷+B卷+C卷+D卷+E卷题库,为全网最全、最新题库,500+真题。每一篇文章都包含了题目描述、解题思路以及实现代码。同时免费提供最新的在线OJ 刷题系统。已有上百名小伙伴通过刷真题题库通过了华为od机考,拒绝一切形式的代考,替考行为!!!以下是本专栏详细内容介绍:本专栏提供在线OJ刷题系统:OJ题库OJ系统注册&使用教程:OJ使用教程其他专栏以及答疑介绍:50+ 高频面试手撕真题,已有上百位小伙伴高频认证。1:机试没过,半年的冷冻期。2:已经订阅过我专栏的同学,推荐新人 阅读详情

相关推荐

【数据挖掘】心跳信号分类预测 之 特征工程 —— 学习笔记(三)

三、特征工程 3.1 看书 常言道,“巧妇难为无米之炊”。在 ML 中,数据和特征将作“米”,模型和算法则为“妇”。若无数量充足的数据、良好表示的特征,再强大的模型也难以得到满意的结果 (garbage in,garbage out)。对于 ML 问题,数据和特征往往决定了结果的上限,而模型、算法的选择及优化则是在逐步接近该上限。 特征工程,顾名思义,是对原始数据进行一系列工程处理,将其提炼为特征,作为输入供算法和模型使用。在本质上,特征工程是一个表示和展现数据的过程。在实际中,特征工程旨在去除...

闻韶 3358

小马哥讲Spring核心编程思想 第七周 Spring Bean作用域

小马哥讲Spring核心编程思想 第七周 Spring Bean作用域 待补充,因时间较紧,后续补充。 01-03 课程介绍,内容综述,课前准备 04丨特性总览:核心特性、数据存储、Web技术、框架整合与测试 05丨Spring版本特性:Spring各个版本引入了哪些新特性? 06丨Spring模块化设计:Spring功能特性如何在不同模块中组织? 07丨Java语言特性运用:各种Java语法特性是怎样被Spring各种版本巧妙运用的? 08丨JDK API实践:Spring怎样取舍Java IO、集合、反

csdn96087的博客 4652

推荐系统公平性之流行度偏差(fairness in recommender systems -- popularity bias)

主要参考论文:《The Unfairness of Popularity Bias in Recommendation》 RMSE@RecSys 2019 流行度偏差是什么 先定义流行物品和非流行物品。下图是(Movielens 1M)数据集中物品的评分情况。 图的横坐标表示不同物品,纵坐标表示物品的评分次数。可以看出只有少部分物品得到了很多的评分,大部分曲线尾部的物品都只有少量的评分,我们也把这部分物品称为长尾物品。在本文中,我们取曲线的前20%对应的物品为流行物品,剩余的为非流行物品(长尾物品)。 然

beilizhang的博客 5284

Spring核心编程思想 Spring核心特性

Spring核心特性框架总览特性总览版本特性模块化设计技术整合Java语言特性运用JDK API实践Java EE API整合编程模型面向对象编程契约接口面向切面编程面向元编程配置元信息注释属性配置面向模块编程Maven ArtifactsOSGI BundlesJava 9 Automatic ModulesSpring @Enable* 注解面向函数编程LambdaReactiveIoC容器重新认识IoCSpring IoC容器依赖查找依赖注入依赖来源Spring IoC容器生命周期BeanBean实例

mxw968的博客 292

STK中的传感器、雷达、发射机、接收机、天线

本文根据STK手册介绍了传感器、雷达、发射机、接收机、天线等对象的基本属性,简略分析了它们的不同之处。

wangyulj的专栏 1万+

四足机械臂避坑指南:从URDF配置到逆运动学控制的完整流程

本文为四足机械臂(Loco-Manipulation)系统开发提供了一份详实的实战避坑指南。文章深入剖析了从URDF模型配置、核心控制循环设计到逆运动学(IK)求解与奖励函数构建的完整流程,重点讲解了如何避免关节命名错误、惯性参数设置不当、IK求解不稳定等常见陷阱,并强调了利用collision_bbox等可视化工具进行高效调试的方法,旨在帮助工程师构建稳定、高效的四足机械臂控制系统。

weixin_42509507的博客 192

小马哥讲Spring核心编程思想 第十周 Spring资源管理

小马哥讲Spring核心编程思想 第十周 Spring资源管理 待补充,因时间较紧,后续补充。 01-03 课程介绍,内容综述,课前准备 04丨特性总览:核心特性、数据存储、Web技术、框架整合与测试 05丨Spring版本特性:Spring各个版本引入了哪些新特性? 06丨Spring模块化设计:Spring功能特性如何在不同模块中组织? 07丨Java语言特性运用:各种Java语法特性是怎样被Spring各种版本巧妙运用的? 08丨JDK API实践:Spring怎样取舍Java IO、集合、反射、动态

csdn96087的博客 5037

Livox-avia+FAST-LIO麻瓜使用教程

激光雷达 SLAM Fastlio 安装

aaaaaaaaaww12的博客 3677

小马哥讲Spring核心编程思想 第四周 Spring IoC依赖查找

小马哥讲Spring核心编程思想 第四周 Spring IoC依赖查找 待补充

csdn96087的博客 477

逆向攻防世界CTF系列40-ReverseMe-120

注意sub_401000main中只传了两个参数,但是跟进后发现四个(可能是隐式传递,放在寄存器里传递了),调试发现a4是输入长度,与最终的you_know_how_to_remove_junk_code比较的是v12(但是并没有被传入),开始怀疑是不是隐式传递了。_mm_xor_si128用于计算128位(16字节)的按位异或,然后通过v14控制循环结束的条件,可以看到v14增长的步长为16,而且通过上面得到的flag值解码得到的字符串为32个字节大小,正好是16的整数倍。

LH1013886337的博客 1411

【tio-websocket】15、学习tio的第1步—tio-study

tio-study 是用于学习 t-io 的示范工程,tio-study 是入门 t-io 最好的方式!tio-study 工程演示的是一个典型的 TCP 长连接应用工程,分为 server(服务端) 和 client(客户端) 工程,server 和 client 共用 common(公共模块) 工程

JACKAL 1万+

小马哥spring编程核心思想_求小马哥讲Spring栈核心编程思想 Spring IoC+Bean+Framework教程...

这次搜集了下小马哥讲Spring栈核心编程思想 Spring IoC+Bean+Framework,最强Spring全面核心实战的视频教程,有需要的朋友可以自行下载学习。课程简介:小马哥出手的Spring栈核心编程思想课程,可以说是非常专业和权威的Spring课程。课程主要的方向与核心是Spring Framework总览,带领同学们重新认识重新认识IoC,Spring IoC容器概述课程。Spr...

weixin_39662462的博客 2476

【大语言模型 14】Transformer权重初始化策略:从Xavier到GPT的参数初始化演进之路

权重初始化是深度学习训练成功的隐秘基石,特别是在Transformer这样的深层架构中,合适的初始化策略能够决定模型的训练稳定性和收敛速度。本文从经典的Xavier和He初始化出发,深入解析Transformer特有的初始化策略,通过数学推导、代码实现和实验分析,揭示不同初始化方法对大语言模型训练的深层影响。我们将探讨为什么GPT系列模型采用特定的初始化方案,以及如何针对不同层设计最优的初始化策略。

熵数实验室 1687

小马哥讲Spring核心编程思想 第八周 Spring Bean生命周期

小马哥讲Spring核心编程思想 第八周 Spring Bean生命周期 待补充,因时间较紧,后续补充。 01-03 课程介绍,内容综述,课前准备 04丨特性总览:核心特性、数据存储、Web技术、框架整合与测试 05丨Spring版本特性:Spring各个版本引入了哪些新特性? 06丨Spring模块化设计:Spring功能特性如何在不同模块中组织? 07丨Java语言特性运用:各种Java语法特性是怎样被Spring各种版本巧妙运用的? 08丨JDK API实践:Spring怎样取舍Java IO、集合、

csdn96087的博客 3548

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

小马哥spring编程核心思想_小马哥讲Spring核心编程思想

小马哥讲Spring核心编程思想├─第01章:Spring Framework总览 (12讲)│ 01丨课程介绍.mp4│ 02丨内容综述.mp4│ 03丨课前准备:学习三件套(工具、代码与大脑).mp4│ 04丨特性总览:核心特性、数据存储、Web技术、框架整合与测试.mp4│ 05丨Spring版本特性:Spring各个版本引入了哪些新特性?....

weixin_42637593的博客 2456

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

小马哥讲Spring核心编程思想 第十一周 Spring国际化

小马哥讲Spring核心编程思想 第十一周 Spring国际化 待补充,因时间较紧,后续补充。 01-03 课程介绍,内容综述,课前准备 04丨特性总览:核心特性、数据存储、Web技术、框架整合与测试 05丨Spring版本特性:Spring各个版本引入了哪些新特性? 06丨Spring模块化设计:Spring功能特性如何在不同模块中组织? 07丨Java语言特性运用:各种Java语法特性是怎样被Spring各种版本巧妙运用的? 08丨JDK API实践:Spring怎样取舍Java IO、集合、反射、动态

csdn96087的博客 1896

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

笔记-小马哥 Spring编程思想笔记

小马哥 Spring编程思想笔记 文章目录小马哥 Spring编程思想笔记Spring Framework1. 课前准备2. Spring 特性总览3. Spring 版本特性4. Spring 模块化设计5. Spring 对Java语言特性运用6. Spring 对JDK API 实践7. Spring 对 Java EE API 整合8. Spring 编程模型9. Spring 核心价值10. 面试题精选11. 重新认识IoC Spring Framework 1. 课前准备 2. Spring 特

4644

Spring 核心编程思想与实战

Spring Framework 专注于 Spring Framework 的核心部分,从特性简介入手,结合官方文档,在实战演练的基础上加深理解。每个章节中都会加入一些比较经典的面试题,帮助解决求职的燃眉之急。通过讲解编程模型、设计思想以及技术规范,站在哲学的高度,分析和猜想Spring 的实现可能,并结合具体源码实现,不断地进行思维和实战训练,最终达到掌握特性、理解原理,学会学习的终极目的 Spring 核心编程思想- IoC 容器概述 Spring 核心编程思想 ...

码农架构 611

Spring核心编程思想(一)Spring 特性总览之核心特性(Core)

核心特性(Core) IoC 容器(IoC Container) Spring 事件(Events) 资源管理(Resources) 国际化(i18n) 校验(Validation) 数据绑定(Data Binding) 类型装换(Type Conversion) Spring 表达式(Spring Express Language) 面向切面编程(AOP) 数据存储(Data Access) JDBC 事务抽象(Transactions) DAO 支持(DAO Support) O/R映射(O/R

zhanghaoyu_java的博客 237

小马哥讲Spring核心编程思想 第十二周 Spring校验

小马哥讲Spring核心编程思想 第十二周 Spring校验 待补充,因时间较紧,后续补充。 01-03 课程介绍,内容综述,课前准备 04丨特性总览:核心特性、数据存储、Web技术、框架整合与测试 05丨Spring版本特性:Spring各个版本引入了哪些新特性? 06丨Spring模块化设计:Spring功能特性如何在不同模块中组织? 07丨Java语言特性运用:各种Java语法特性是怎样被Spring各种版本巧妙运用的? 08丨JDK API实践:Spring怎样取舍Java IO、集合、反射、动态代

csdn96087的博客 227

小马哥讲Spring核心编程思想 第九周 Spring Bean配置元信息

小马哥讲Spring核心编程思想 第九周 Spring Bean配置元信息 待补充,因时间较紧,后续补充。 01-03 课程介绍,内容综述,课前准备 04丨特性总览:核心特性、数据存储、Web技术、框架整合与测试 05丨Spring版本特性:Spring各个版本引入了哪些新特性? 06丨Spring模块化设计:Spring功能特性如何在不同模块中组织? 07丨Java语言特性运用:各种Java语法特性是怎样被Spring各种版本巧妙运用的? 08丨JDK API实践:Spring怎样取舍Java IO、集合

csdn96087的博客 264

小马哥讲Spring核心编程思想 第五周 Spring IoC依赖注入

小马哥讲Spring核心编程思想 第五周 Spring IoC依赖注入 待补充,因时间较紧,后续补充。 01-03 课程介绍,内容综述,课前准备 04丨特性总览:核心特性、数据存储、Web技术、框架整合与测试 05丨Spring版本特性:Spring各个版本引入了哪些新特性? 06丨Spring模块化设计:Spring功能特性如何在不同模块中组织? 07丨Java语言特性运用:各种Java语法特性是怎样被Spring各种版本巧妙运用的? 08丨JDK API实践:Spring怎样取舍Java IO、集合、反

csdn96087的博客 388

03 - 04小马哥讲Spring核心编程思想 --- 提前准备 + 特性总览

springboot特性概览

nj112233的博客 949

Spring Boot 核心编程思想-第一部分-读书笔记

怕什么真理无穷进一步有近一步的欢喜说明本文是Spring Boot核心编程思想记录的笔记,书籍地址:Spring Boot编程思想(核心篇):本书已经简单读过一遍,在第一遍读的时候发现里面...

阿飞云漫步 1505

小马哥讲Spring核心编程思想 第六周 Spring IoC依赖来源

小马哥讲Spring核心编程思想 第六周 Spring IoC依赖来源 待补充,因时间较紧,后续补充。 01-03 课程介绍,内容综述,课前准备 04丨特性总览:核心特性、数据存储、Web技术、框架整合与测试 05丨Spring版本特性:Spring各个版本引入了哪些新特性? 06丨Spring模块化设计:Spring功能特性如何在不同模块中组织? 07丨Java语言特性运用:各种Java语法特性是怎样被Spring各种版本巧妙运用的? 08丨JDK API实践:Spring怎样取舍Java IO、集合、反

csdn96087的博客 2403

spring实战_Spring 核心编程思想与实战

Spring Framework 核心编程思想-源码地址专注于 Spring Framework 的核心部分,从特性简介入手,结合官方文档,在实战演练的基础上加深理解。每个章节中都会加入一些比较经典的面试题,帮助解决求职的燃眉之急。通过讲解编程模型、设计思想以及技术规范,站在哲学的高度,分析和猜想Spring 的实现可能,并结合具体源码实现,不断地进行思维和实战训练,最终达到掌握特性、理解原理,学...

weixin_33075245的博客 251
上一篇: Spring核心编程思想(四)Spring 特性总览之Spring 对 JDK API 实践
下一篇: Spring核心编程思想(六)Spring 特性总览之相应面试题
春日负暄
博客等级 码龄9年 2粉丝 30原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值