本文章我们会解读一下Spring如何根据beanDefinition创建bean的;
代码入口:
AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class);
applicationContext.refresh();
当spring执行refresh()这个方法进行上下文刷新时, 会进行非懒加载的bean的创建,创建非懒加载的bean的源码入口为:
finishBeanFactoryInitialization(beanFactory);
该方法的具体实现:
/**
* Finish the initialization of this context's bean factory,
* initializing all remaining singleton beans.
*/
protected void finishBeanFactoryInitialization(ConfigurableListableBeanFactory beanFactory) {
// Initialize conversion service for this context.
// 如果BeanFactory中存在名字叫conversionService的Bean,则设置为BeanFactory的conversionService属性
// ConversionService是用来进行类型转化的
if (beanFactory.containsBean(CONVERSION_SERVICE_BEAN_NAME) &&
beanFactory.isTypeMatch(CONVERSION_SERVICE_BEAN_NAME, ConversionService.class)) {
beanFactory.setConversionService(
beanFactory.getBean(CONVERSION_SERVICE_BEAN_NAME, ConversionService.class));
}
// Register a default embedded value resolver if no BeanFactoryPostProcessor
// (such as a PropertySourcesPlaceholderConfigurer bean) registered any before:
// at this point, primarily for resolution in annotation attribute values.
// 设置默认的占位符解析器 ${xxx} ---key
if (!beanFactory.hasEmbeddedValueResolver()) {
beanFactory.addEmbeddedValueResolver(strVal -> getEnvironment().resolvePlaceholders(strVal));
}
// Initialize LoadTimeWeaverAware beans early to allow for registering their transformers early.
String[] weaverAwareNames = beanFactory.getBeanNamesForType(LoadTimeWeaverAware.class, false, false);
for (String weaverAwareName : weaverAwareNames) {
getBean(weaverAwareName);
}
// Stop using the temporary ClassLoader for type matching.
beanFactory.setTempClassLoader(null);
// Allow for caching all bean definition metadata, not expecting further changes.
beanFactory.freezeConfiguration();
// Instantiate all remaining (non-lazy-init) singletons.
// 实例化非懒加载的单例Bean
beanFactory.preInstantiateSingletons();
}
上述方法中,进行实例化非懒加载的单例bean的代码是
// 实例化非懒加载的单例Bean
beanFactory.preInstantiateSingletons();
点击进入
DefaultListableBeanFactory.java的public void preInstantiateSingletons() 的方法;
@Override
public void preInstantiateSingletons() throws BeansException {
if (logger.isTraceEnabled()) {
logger.trace("Pre-instantiating singletons in " + this);
}
// Iterate over a copy to allow for init methods which in turn register new bean definitions.
// While this may not be part of the regular factory bootstrap, it does otherwise work fine.
List beanNames = new ArrayList<>(this.beanDefinitionNames);
// Trigger initialization of all non-lazy singleton beans...
for (String beanName : beanNames) {
// 获取合并后的BeanDefinition
RootBeanDefinition bd = getMergedLocalBeanDefinition(beanName);
//bd.isAbstract() 是不是抽象的BeanDefinition 一般是xml定义的 抽象的beanDefinition不会被创建
if (!bd.isAbstract() && bd.isSingleton() && !bd.isLazyInit()) {
if (isFactoryBean(beanName)) {
// 获取FactoryBean对象
Object bean = getBean(FACTORY_BEAN_PREFIX + beanName);
if (bean instanceof FactoryBean) {
FactoryBean factory = (FactoryBean) bean;
boolean isEagerInit;
if (System.getSecurityManager() != null && factory instanceof SmartFactoryBean) {
isEagerInit = AccessController.doPrivileged(
(PrivilegedAction) ((SmartFactoryBean) factory)::isEagerInit,
getAccessControlContext());
}
else {
isEagerInit = (factory instanceof SmartFactoryBean &&
((SmartFactoryBean) factory).isEagerInit());
}
if (isEagerInit) {
// 创建真正的Bean对象(getObject()返回的对象)
getBean(beanName);
}
}
}
else {
// 创建Bean对象
getBean(beanName);
}
}
}
// 所有的非懒加载单例Bean都创建完了后
// Trigger post-initialization callback for all applicable beans...
for (String beanName : beanNames) {
Object singletonInstance = getSingleton(beanName);
if (singletonInstance instanceof SmartInitializingSingleton) {
StartupStep smartInitialize = this.getApplicationStartup().start("spring.beans.smart-initialize")
.tag("beanName", beanName);
SmartInitializingSingleton smartSingleton = (SmartInitializingSingleton) singletonInstance;
if (System.getSecurityManager() != null) {
AccessController.doPrivileged((PrivilegedAction) () -> {
smartSingleton.afterSingletonsInstantiated();
return null;
}, getAccessControlContext());
}
else {
smartSingleton.afterSingletonsInstantiated();
}
smartInitialize.end();
}
}
}
此方法中 getBean(beanName);会创建bean;我们进入getBean()这个方法
@Override
public Object getBean(String name) throws BeansException {
return doGetBean(name, null, null, false);
}
然后我们进入doGetBean(name, null, null, false)这个方法,主要判断该bean的类型然后根据具体情况进行调用protected Object createBean(String beanName, RootBeanDefinition mbd, @Nullable Object[] args) 创建bean的实例。
/**
* Return an instance, which may be shared or independent, of the specified bean.
* @param name the name of the bean to retrieve
* @param requiredType the required type of the bean to retrieve
* @param args arguments to use when creating a bean instance using explicit arguments
* (only applied when creating a new instance as opposed to retrieving an existing one)
* @param typeCheckOnly whether the instance is obtained for a type check,
* not for actual use
* @return an instance of the bean
* @throws BeansException if the bean could not be created
*/
@SuppressWarnings("unchecked")
protected T doGetBean(
String name, @Nullable Class requiredType, @Nullable Object[] args, boolean typeCheckOnly)
throws BeansException {
//对beanName做处理
// name有可能是 &xxx 或者 xxx,如果name是&xxx,那么beanName就是xxx
// name有可能传入进来的是别名,那么beanName就是id
String beanName = transformedBeanName(name);
Object beanInstance;
// Eagerly check singleton cache for manually registered singletons.
//先在单例池中去获取bean
Object sharedInstance = getSingleton(beanName);
//如果获取到了
if (sharedInstance != null && args == null) {
if (logger.isTraceEnabled()) {
if (isSingletonCurrentlyInCreation(beanName)) {
logger.trace("Returning eagerly cached instance of singleton bean '" + beanName +
"' that is not fully initialized yet - a consequence of a circular reference");
}
else {
logger.trace("Returning cached instance of singleton bean '" + beanName + "'");
}
}
// 如果获取到的bean(sharedInstance)是FactoryBean,需要对该bean进行进一步处理
beanInstance = getObjectForBeanInstance(sharedInstance, name, beanName, null);
}
else { //如果在单例池中没有获取到bean
// Fail if we're already creating this bean instance:
// We're assumably within a circular reference.
if (isPrototypeCurrentlyInCreation(beanName)) {
throw new BeanCurrentlyInCreationException(beanName);
}
// Check if bean definition exists in this factory.
BeanFactory parentBeanFactory = getParentBeanFactory();
//containsBeanDefinition(beanName) 检测spring容器中有没有这个名字的bean
//当前容器中没有找到,去父工厂找
if (parentBeanFactory != null && !containsBeanDefinition(beanName)) {
// Not found -> check parent.
// &&&&xxx---->&xxx
String nameToLookup = originalBeanName(name);
if (parentBeanFactory instanceof AbstractBeanFactory) {
return ((AbstractBeanFactory) parentBeanFactory).doGetBean(
nameToLookup, requiredType, args, typeCheckOnly);
}
else if (args != null) {
// Delegation to parent with explicit args.
return (T) parentBeanFactory.getBean(nameToLookup, args);
}
else if (requiredType != null) {
// No args -> delegate to standard getBean method.
return parentBeanFactory.getBean(nameToLookup, requiredType);
}
else {
return (T) parentBeanFactory.getBean(nameToLookup);
}
}
if (!typeCheckOnly) {
markBeanAsCreated(beanName);
}
//JFR代码运行机制
StartupStep beanCreation = this.applicationStartup.start("spring.beans.instantiate")
.tag("beanName", name);
try {
if (requiredType != null) {
beanCreation.tag("beanType", requiredType::toString);
}
//取出名字对应的合并后的beanDefinition
RootBeanDefinition mbd = getMergedLocalBeanDefinition(beanName);
// 检查BeanDefinition是不是Abstract的,如果是Abstract 报错
checkMergedBeanDefinition(mbd, beanName, args);
// Guarantee initialization of beans that the current bean depends on.
//创建当前bean之前,先需要创建@dependsOn里面的bean
String[] dependsOn = mbd.getDependsOn();
if (dependsOn != null) {
// dependsOn表示当前beanName所依赖的,当前Bean创建之前dependsOn所依赖的Bean必须已经创建好了
for (String dep : dependsOn) {
// beanName是不是被dep依赖了,如果是则出现了循环依赖
if (isDependent(beanName, dep)) {
throw new BeanCreationException(mbd.getResourceDescription(), beanName,
"Circular depends-on relationship between '" + beanName + "' and '" + dep + "'");
}
// dep被beanName依赖了,存入dependentBeanMap中,dep为key,beanName为value
registerDependentBean(dep, beanName);
// 创建所依赖的bean
try {
getBean(dep);
}
catch (NoSuchBeanDefinitionException ex) {
throw new BeanCreationException(mbd.getResourceDescription(), beanName,
"'" + beanName + "' depends on missing bean '" + dep + "'", ex);
}
}
}
// Create bean instance.
if (mbd.isSingleton()) {// 创建单例bean的逻辑: 先从缓存中拿,如果没有的,再创建该bean,并且存入单例缓存中
sharedInstance = getSingleton(beanName, () -> {
try {
return createBean(beanName, mbd, args);
}
catch (BeansException ex) {
// Explicitly remove instance from singleton cache: It might have been put there
// eagerly by the creation process, to allow for circular reference resolution.
// Also remove any beans that received a temporary reference to the bean.
destroySingleton(beanName);
throw ex;
}
});
beanInstance = getObjectForBeanInstance(sharedInstance, name, beanName, mbd);
}
else if (mbd.isPrototype()) {//创建原型bean的逻辑:直接创建对象
// It's a prototype -> create a new instance.
Object prototypeInstance = null;
try {
beforePrototypeCreation(beanName);
prototypeInstance = createBean(beanName, mbd, args);
}
finally {
afterPrototypeCreation(beanName);
}
beanInstance = getObjectForBeanInstance(prototypeInstance, name, beanName, mbd);
}
else {//有作用域相关注解的bean 例如request、session等
获取scope作用域注解信息
String scopeName = mbd.getScope();
if (!StringUtils.hasLength(scopeName)) {
throw new IllegalStateException("No scope name defined for bean ´" + beanName + "'");
}
Scope scope = this.scopes.get(scopeName);
if (scope == null) {
throw new IllegalStateException("No Scope registered for scope name '" + scopeName + "'");
}
try { // session.getAttriute(beaName) setAttri
//类似非懒加载单例bean的创建,先从缓存中取,取不到,创建bean且放入缓存
Object scopedInstance = scope.get(beanName, () -> {
beforePrototypeCreation(beanName);
try {
return createBean(beanName, mbd, args);
}
finally {
afterPrototypeCreation(beanName);
}
});
beanInstance = getObjectForBeanInstance(scopedInstance, name, beanName, mbd);
}
catch (IllegalStateException ex) {
throw new ScopeNotActiveException(beanName, scopeName, ex);
}
}
}
catch (BeansException ex) {
beanCreation.tag("exception", ex.getClass().toString());
beanCreation.tag("message", String.valueOf(ex.getMessage()));
cleanupAfterBeanCreationFailure(beanName);
throw ex;
}
finally {
beanCreation.end();
}
}
// 检查通过name所获得到的beanInstance的类型是否是requiredType
return adaptBeanInstance(name, beanInstance, requiredType);
}
进入protected Object createBean(String beanName, RootBeanDefinition mbd, @Nullable Object[] args) ,这里会进行bean的实例化。
/**
* Central method of this class: creates a bean instance,
* populates the bean instance, applies post-processors, etc.
* @see #doCreateBean
*/
@Override
protected Object createBean(String beanName, RootBeanDefinition mbd, @Nullable Object[] args)
throws BeanCreationException {
if (logger.isTraceEnabled()) {
logger.trace("Creating instance of bean '" + beanName + "'");
}
RootBeanDefinition mbdToUse = mbd;
// Make sure bean class is actually resolved at this point, and
// clone the bean definition in case of a dynamically resolved Class
// which cannot be stored in the shared merged bean definition.
// 马上就要实例化Bean了,确保beanClass被加载了,进行类加载
Class resolvedClass = resolveBeanClass(mbd, beanName);
if (resolvedClass != null && !mbd.hasBeanClass() && mbd.getBeanClassName() != null) {
mbdToUse = new RootBeanDefinition(mbd);
mbdToUse.setBeanClass(resolvedClass);
}
// Prepare method overrides.
try {
mbdToUse.prepareMethodOverrides();
}
catch (BeanDefinitionValidationException ex) {
throw new BeanDefinitionStoreException(mbdToUse.getResourceDescription(),
beanName, "Validation of method overrides failed", ex);
}
try {
// Give BeanPostProcessors a chance to return a proxy instead of the target bean instance.
// 实例化前
Object bean = resolveBeforeInstantiation(beanName, mbdToUse);
if (bean != null) {
return bean;
}
}
catch (Throwable ex) {
throw new BeanCreationException(mbdToUse.getResourceDescription(), beanName,
"BeanPostProcessor before instantiation of bean failed", ex);
}
try {
Object beanInstance = doCreateBean(beanName, mbdToUse, args);
if (logger.isTraceEnabled()) {
logger.trace("Finished creating instance of bean '" + beanName + "'");
}
return beanInstance;
}
catch (BeanCreationException | ImplicitlyAppearedSingletonException ex) {
// A previously detected exception with proper bean creation context already,
// or illegal singleton state to be communicated up to DefaultSingletonBeanRegistry.
throw ex;
}
catch (Throwable ex) {
throw new BeanCreationException(
mbdToUse.getResourceDescription(), beanName, "Unexpected exception during bean creation", ex);
}
}
你可能感兴趣的:(spring,java,mysql)
windows安装jdk
weixin_33955681
java
应用场景在windows系统环境中,如果需要运行java,开发java的环境,那么就需要在电脑上安装jdk【又称为,java的运行开发环境】,很多第三方软件都需要使用到jdk,比如tomcat,eclipse,等等,所以安装jdk,可能是安装很多软件的第一步!资源下载jdk1.7下载jdk1.7下载地址jdk1.8下载jdk1.8下载地址安装步骤安装过程十分简单,双击下载的exe可执行文件安装完毕
django mysql字段类型_Django ORM常用字段类型以及参数
思想化作潮流
django mysql字段类型
这篇文章主要介绍了简单了解DjangoORM常用字段类型及参数配置,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下一、数值型AutoField对应int(11)。自增主键,DjangoModel默认提供,可以被重写。BooleanField对应tinyint(1)。布尔类型字段,一般用于记录状态标记。DecimalField对应decimal。开发
责任链模式详解和在Spring Boot 项目中的使用场景
冰糖心书房
设计模式 Java 开发 责任链模式 spring boot java
责任链模式详解1.定义:责任链模式(ChainofResponsibilityPattern)是一种行为型设计模式。它将请求的发送者和接收者解耦,允许你将请求沿着处理者链进行传递,直到有一个处理者处理它为止。每个处理者都包含对下一个处理者的引用,形成一条链。2.结构:Handler(抽象处理者):定义一个处理请求的接口,并维护一个指向下一个处理者的引用。ConcreteHandler(具体处理者)
ApplicationContext 的启动流程是怎样的?
冰糖心书房
2025 Java面试系列 Spring Framework spring
ApplicationContext是SpringIoC容器的核心接口,它提供了配置、访问和管理Bean的功能。ApplicationContext的启动流程可以细分为以下几个关键步骤,这些步骤主要在AbstractApplicationContext类的refresh()方法中实现:1.prepareRefresh()-准备刷新:设置启动时间戳。设置容器的激活状态。初始化属性源(property
计算机网络——TCP / IP 网络模型
确定吗阿斌
网络 计算机网络 tcp/ip
OSI七层模型七层模型是国际标准化的一个网络分层模型,大体结构可以分成七层。每层提供不同的功能。图片来源JavaGuide但是这样七层结构比较复杂,不太实用,所以有了TCP/IP模型。TCP/IP网络模型TCP/IP网络模型可以看作是OSI模型的简化版本。它将OSI网络模型合并成了4层结构。应用层、表示层、会话层统一被合并成了应用层。传输层和网络层没有变化,数据链路层和物理层合并成了物理链路层/网
Spring Cloud LoadBalancer详解
10年JAVA大数据技术研究者
微服务 spring cloud java spring LoadBalancer 源码解析
一、介绍SpringCloudLoadBalancer是SpringCloud官方自己提供的客户端负载均衡器,抽象和实现,用来替代Ribbon(已经停更),二、Ribbon和Loadbalance对比组件组件提供的负载策略支持负载的客户端Ribbon随机RandomRule轮询RoundRobinRule重试RetryRule最低并发BestAvailableRule可用过滤Availabilit
Github 仓库 git clone 速度过慢解决方案
事业运财运爆棚
github
很多时候想从GitHub上clone一个仓库,都会遇到速度慢的问题,而且经常连接失败,这里给出有效解决方案。一、背景应该是很多小伙伴碰到过的问题:想从GitHub上面clone项目,很多情况下会慢的离谱,等待好久后报错:代码语言:javascript代码运行次数:0复制CloudStudio代码运行fatal:earlyEOFfatal:theremoteendhungupunexpectedly
Java必知必会系列:RESTful API与Web服务
AI天才研究院
AI实战 DeepSeek R1 & 大数据AI人工智能大模型 Python实战 大数据 人工智能 语言模型 Java Python 架构设计
文章目录1.背景介绍RESTfulAPI与Web服务什么是RESTful?为什么要用RESTfulAPI?Web服务架构1.客户端–服务器体系结构2.无状态3.明确的角色4.使用合适的HTTP方法5.支持缓存6.使用链接关系代替非自描述信息7.异步处理RESTfulAPI框架SpringMVCRubyonRailsDjangoRestFramework如何利用框架开发RESTfulAPI创建项目创
Kotlin DSL(Domain-Specific Language,领域特定语言)
tangweiguo03051987
kotlin python 开发语言
DSL(Domain-SpecificLanguage,领域特定语言)是一种专门为某个特定领域设计的编程语言。与通用编程语言(如Java、Kotlin等)相比,DSL通常具有更简洁的语法和更少的语法元素,这使得它更适合用于描述特定领域的概念和操作。在Kotlin中,DSL可以以多种方式实现,例如使用函数式编程、使用扩展函数、使用中缀表达式等。以下是实现DSL的示例://使用函数式编程funbuil
Java反射
qq_65860758
java 开发语言
Java反射:深入探索与实战应用在Java编程的世界里,反射(Reflection)是一种强大的机制,它允许程序在运行时检查、修改和操作自身的结构和行为。通过反射,你可以动态地获取类的属性、方法、构造函数等信息,甚至可以调用私有方法和访问私有字段。这种能力在框架开发、依赖注入、测试工具等场景中尤为重要。本文将带你深入了解Java反射的工作原理、基本用法以及实战应用。一、反射的基本概念反射的核心在于
基于JavaWeb开发的Java+SpringBoot+vue+element实现前后端分离玩具商城系统
网顺技术团队
成品程序项目 spring boot 开发语言 课程设计 java vue.js
基于JavaWeb开发的Java+SpringBoot+vue+element实现前后端分离玩具商城系统作者主页网顺技术团队欢迎点赞收藏⭐留言文末获取源码联系方式查看下方微信号获取联系方式承接各种定制系统精彩系列推荐精彩专栏推荐订阅不然下次找不到哟Java毕设项目精品实战案例《1000套》感兴趣的可以先收藏起来,还有大家在毕设选题,项目以及论文编写等相关问题都可以给我留言咨询,希望帮助更多的人文章
SpringBoot配置文件的优先级(保姆级超详细讲解)
来杯@Java
spring boot python 后端
文章目录配置优先级排序项目外部配置文件项目内部配置文件Bootstrap配置文件配置优先级排序命令行参数;java:comp/env的JNDI属性(当前J2EE应用的环境);JAVA系统的环境属性;操作系统的环境变量;JAR包外部的application-xxx.properties或application-xxx.yml配置文件;JAR包内部的application-xxx.properties
Java实现向MySQL数据库批量更新数据的常见方法
来杯@Java
数据库 java mysql
文章目录一、IN二、For+Update三、insertinto...onduplicatekeyupdate四、replaceinto五、set...case...when...where六、创建临时表案例一、IN第一种方式是借助IN语句,这种方式局限性较大,更新结果必须一致,比如下面就是将满足条件的行的状态(status)都置为1。如果是一部分置为1,一部分置为2等,则无法实现,要么就是写多条
Java实现Word文档转换为PDF详解
一休哥助手
工具 java java word pdf
目录引言为什么要将Word转换为PDF实现方式概述使用ApachePOI和iTextApachePOI简介iText简介安装依赖代码实现
Linux 下Hive 安装(Remote Metastore Database 单节点)
A6-母婴小店-第6分店
HIVE hadoop
1、Linux下安装好mysql:Linux下Mysql安装2、启动hadoop集群:1、zk启动[root@node02~]#zkServer.shstartZooKeeperJMXenabledbydefaultUsingconfig:/opt/software/apache-zookeeper-3.6.2-bin/bin/../conf/zoo.cfgStartingzookeeper...
java练习(46)
IIIIIIlllii
算法 数据结构 java
ps:题目来自力扣四数之和给你一个由n个整数组成的数组nums,和一个目标值target。请你找出并返回满足下述全部条件且不重复的四元组[nums[a],nums[b],nums[c],nums[d]](若两个四元组元素一一对应,则认为两个四元组重复):0>fourSum(int[]nums,inttarget){List>result=newArrayList0&&nums[i]==nums[i
网络安全:攻击和防御练习(全战课), DDos压力测试
网安-轩逸
web安全 ddos okhttp
XSS跨站脚本攻击:Cross-sitescripting(简称xss)跨站脚本。一种网站的安全漏洞的攻击,代码注入攻击的一种。XSS攻击通常指的是通过利用网页开发时留下的漏洞,通过巧妙的方法注入恶意指令代码到网页,使用户加载并执行攻击者恶意制造的网页程序。这些恶意网页程序通常是JavaScript,但实际上也可以包括Java,VBScript,ActiveX,Flash或者甚至是普通的HTML。
【Java数据结构】哈希表
回响N
数据结构 散列表 哈希算法
哈希表1.哈希表哈希散列(散列表):不经过任何比较,一次直接从表中得到要搜索的元素,时间复杂度是O(1)。哈希函数的设置hash(key)=key%capacity,capacity是存储元素底层空间总的大小。2.哈希冲突当数据集合中可能存在多个数据都被插在一块区域,如上面例题23和3取模后都放在了数组下标3的位置,这是就存在冲突,也就被称为哈希冲突。冲突的解决方法:避免冲突、解决冲突。3.避免冲
推荐算法工程师的技术图谱和学习路径
执于代码
开发者职业加速服务 推荐算法 学习 算法
推荐算法工程师的技术图谱和学习路径可以从多个维度进行概述,可以总结如下:一、技术图谱推荐算法工程师需要掌握的技术栈主要分为以下几个方面:数学基础:微积分、线性代数、概率论与统计学是推荐算法的基础,用于理解模型的数学原理和优化算法。高等数学、最优化理论、几何和图论等知识对于复杂模型的设计和优化至关重要。编程与数据结构:熟练掌握Python、Java等编程语言,具备良好的编程习惯和代码优化能力。掌握数
Android15 am命令 APP安装流程
惠(xi)斌
python 开发语言
一.PM安装命令使用命令pminstall-rxxx.apkpm命令安装app会触发PackageManagerShellCommand中runInstall()方法frameworks/base/services/core/java/com/android/server/pm/PackageManagerShellCommand.java1.onCommand函数:publicintonComm
URI 未注册(设置 | 语言和框架 | 架构和 DTD)
我去2001
java 前端 tomcat
一、问题描述:在springboot项目中的resources中新建mybatis-config.xml文件时,从mybatis文档中复制的代码报错:URI未注册(设置|语言和框架|架构和DTD)二、解决:在Springboot项目的设置->架构和DTD中添加红色的网址(http://mybatis.org/dtd/mybatis-3-config.dtd)
Java和C++的区别有哪些?
javac++
语言特性编译与运行机制Java:是一种半编译半解释型的语言。Java源代码(.java文件)首先通过编译器(如javac)编译成字节码文件(.class文件),字节码是一种中间形式,不直接对应特定硬件平台的机器码。然后,Java虚拟机(JVM)负责解释执行字节码,使得Java程序具有“一次编写,到处运行”的跨平台特性。C++:是编译型语言。C++源代码经过编译器(如GCC、Clang等)直接编译成
build.gradle文件generateProtoTasks含义
天若子
android
在Android项目的build.gradle文件中,generateProtoTasks通常与使用ProtocolBuffers(Protobuf)进行代码生成相关,下面为你详细解释其含义和作用。整体背景ProtocolBuffers是一种用于序列化结构化数据的高效机制,在Android和Java项目中,我们通常会定义.proto文件来描述数据结构,然后使用Protobuf编译器根据这些.pro
初识React,基础(1), 安装react,jsx文件,类组件和函数组件,css样式
ybilss
react react.js 前端 前端框架
第一部分:初识reactreact:用于构建用户界面的JavaScript库全局安装,win+r,命令:npminstallcreate-react-app-g3.创建一个react应用,这里我在vscode里面创建,创建之后,运行create-react-appmy-appcdmy-appnpmstart第二部分:redact组件定义以及使用react中组件分为两种:类组件和函数组件,一般使用是
默默的学python——变量
xiaoli_panpan
# python基础 python 开发语言 linux
一、Python的变量定义在Python中,变量(variable)的定义其实是一种更宽松的概念,与其他一些编程语言(如C、Java等)有所不同。在Python中,当你为某个东西(例如一个值、一个对象、一个数据结构等)赋予一个名字时,你就创建了一个变量。因此,我们不难得知:变量(variable)是表示(或指向)特定值的名称。Python的变量定义有几个关键点:1、动态类型:Python是一种动态
Nestjs中怎么自动对应mysql结构的dto和entity?
人工智能
在NestJS中,自动将MySQL数据库的结构映射到DTO(数据传输对象)和Entity(实体类)通常是通过TypeORM(或Sequelize等ORM库)来实现的。你可以通过TypeORM的装饰器来自动映射数据库表结构到实体类,并使用DTO来定义数据交换的格式。下面是如何使用TypeORM自动对应MySQL数据库结构的DTO和Entity的基本步骤。1.安装依赖首先,确保你已经安装了以下依赖:n
Nestjs中怎么自动对应mysql结构的dto和enti
人工智能
在NestJS中,自动将MySQL数据库的结构映射到DTO(数据传输对象)和Entity(实体类)通常是通过TypeORM(或Sequelize等ORM库)来实现的。你可以通过TypeORM的装饰器来自动映射数据库表结构到实体类,并使用DTO来定义数据交换的格式。下面是如何使用TypeORM自动对应MySQL数据库结构的DTO和Entity的基本步骤。1.安装依赖首先,确保你已经安装了以下依赖:n
Android.bp在安卓项目中的构建
wydaicls
Android 代码学习 android
Android.bp是Android构建系统的一部分,主要用于描述模块和它们之间的依赖关系。它使用一种名为Blueprint的DSL(领域特定语言)来定义模块的属性和行为,取代了之前的Android.mk文件。1.基本结构Android.bp文件的基本结构包括:模块类型:定义模块的类型,如cc_library、java_library等。属性:模块的属性,如名称、源文件、依赖关系等。2.常见模块类
使用 pymysql 连接 MySQL 数据库
TD_ccdd
数据库 mysql python
使用pymysql连接MySQL数据库在现代应用程序开发中,与数据库的交互是一个常见的需求。本文将介绍如何使用Python的pymysql库连接到MySQL数据库,并执行基本的查询操作。我们将通过一个简单的例子来说明整个过程。1.安装pymysql库在开始之前,需要确保你的开发环境中安装了pymysql库。你可以使用以下命令通过pip来安装它:pipinstallpymysql2.连接到MySQL
SOFABoot 4.0 正式发布,多项新特性等你来体验!
Part.1「亿点点」新特性基于Java17SOFABoot4.0依赖Java17作为最小支持的JDK版本。如果你的应用目前使用Java8或11,你需要先将自己的JDK版本升级到17才能基于SOFABoot4.0进行开发。二方库升级SOFABoot4.0基于SpringBoot3.0与SpringFramework6构建。在SpringBoot3.0与SpringFramework6引入的二方库升
微信开发者验证接口开发
362217990
微信 开发者 token 验证
微信开发者接口验证。
Token,自己随便定义,与微信填写一致就可以了。
根据微信接入指南描述 http://mp.weixin.qq.com/wiki/17/2d4265491f12608cd170a95559800f2d.html
第一步:填写服务器配置
第二步:验证服务器地址的有效性
第三步:依据接口文档实现业务逻辑
这里主要讲第二步验证服务器有效性。
建一个
一个小编程题-类似约瑟夫环问题
BrokenDreams
编程
今天群友出了一题:
一个数列,把第一个元素删除,然后把第二个元素放到数列的最后,依次操作下去,直到把数列中所有的数都删除,要求依次打印出这个过程中删除的数。
&
linux复习笔记之bash shell (5) 关于减号-的作用
eksliang
linux关于减号“-”的含义 linux关于减号“-”的用途 linux关于“-”的含义 linux关于减号的含义
转载请出自出处:
http://eksliang.iteye.com/blog/2105677
管道命令在bash的连续处理程序中是相当重要的,尤其在使用到前一个命令的studout(标准输出)作为这次的stdin(标准输入)时,就显得太重要了,某些命令需要用到文件名,例如上篇文档的的切割命令(split)、还有
Unix(3)
18289753290
unix ksh
1)若该变量需要在其他子进程执行,则可用"$变量名称"或${变量}累加内容
什么是子进程?在我目前这个shell情况下,去打开一个新的shell,新的那个shell就是子进程。一般状态下,父进程的自定义变量是无法在子进程内使用的,但通过export将变量变成环境变量后就能够在子进程里面应用了。
2)条件判断: &&代表and ||代表or&nbs
关于ListView中性能优化中图片加载问题
酷的飞上天空
ListView
ListView的性能优化网上很多信息,但是涉及到异步加载图片问题就会出现问题。
具体参看上篇文章http://314858770.iteye.com/admin/blogs/1217594
如果每次都重新inflate一个新的View出来肯定会造成性能损失严重,可能会出现listview滚动是很卡的情况,还会出现内存溢出。
现在想出一个方法就是每次都添加一个标识,然后设置图
德国总理默多克:给国人的一堂“震撼教育”课
永夜-极光
教育
http://bbs.voc.com.cn/topic-2443617-1-1.html德国总理默多克:给国人的一堂“震撼教育”课
安吉拉—默克尔,一位经历过社会主义的东德人,她利用自己的博客,发表一番来华前的谈话,该说的话,都在上面说了,全世界想看想传播——去看看默克尔总理的博客吧!
德国总理默克尔以她的低调、朴素、谦和、平易近人等品格给国人留下了深刻印象。她以实际行动为中国人上了一堂
关于Java继承的一个小问题。。。
随便小屋
java
今天看Java 编程思想的时候遇见一个问题,运行的结果和自己想想的完全不一样。先把代码贴出来!
//CanFight接口
interface Canfight {
void fight();
}
//ActionCharacter类
class ActionCharacter {
public void fight() {
System.out.pr
23种基本的设计模式
aijuans
设计模式
Abstract Factory:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。 Adapter:将一个类的接口转换成客户希望的另外一个接口。A d a p t e r模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。 Bridge:将抽象部分与它的实现部分分离,使它们都可以独立地变化。 Builder:将一个复杂对象的构建与它的表示分离,使得同
《周鸿祎自述:我的互联网方法论》读书笔记
aoyouzi
读书笔记
从用户的角度来看,能解决问题的产品才是好产品,能方便/快速地解决问题的产品,就是一流产品.
商业模式不是赚钱模式
一款产品免费获得海量用户后,它的边际成本趋于0,然后再通过广告或者增值服务的方式赚钱,实际上就是创造了新的价值链.
商业模式的基础是用户,木有用户,任何商业模式都是浮云.商业模式的核心是产品,本质是通过产品为用户创造价值.
商业模式还包括寻找需求
JavaScript动态改变样式访问技术
百合不是茶
JavaScript style属性 ClassName属性
一:style属性
格式:
HTML元素.style.样式属性="值";
创建菜单:在html标签中创建 或者 在head标签中用数组创建
<html>
<head>
<title>style改变样式</title>
</head>
&l
jQuery的deferred对象详解
bijian1013
jquery deferred对象
jQuery的开发速度很快,几乎每半年一个大版本,每两个月一个小版本。
每个版本都会引入一些新功能,从jQuery 1.5.0版本开始引入的一个新功能----deferred对象。
&nb
淘宝开放平台TOP
Bill_chen
C++ c 物流 C#
淘宝网开放平台首页:http://open.taobao.com/
淘宝开放平台是淘宝TOP团队的产品,TOP即TaoBao Open Platform,
是淘宝合作伙伴开发、发布、交易其服务的平台。
支撑TOP的三条主线为:
1.开放数据和业务流程
* 以API数据形式开放商品、交易、物流等业务;
&
【大型网站架构一】大型网站架构概述
bit1129
网站架构
大型互联网特点
面对海量用户、海量数据
大型互联网架构的关键指标
高并发
高性能
高可用
高可扩展性
线性伸缩性
安全性
大型互联网技术要点
前端优化
CDN缓存
反向代理
KV缓存
消息系统
分布式存储
NoSQL数据库
搜索
监控
安全
想到的问题:
1.对于订单系统这种事务型系统,如
eclipse插件hibernate tools安装
白糖_
Hibernate
eclipse helios(3.6)版
1.启动eclipse 2.选择 Help > Install New Software...> 3.添加如下地址:
http://download.jboss.org/jbosstools/updates/stable/helios/ 4.选择性安装:hibernate tools在All Jboss tool
Jquery easyui Form表单提交注意事项
bozch
jquery easyui
jquery easyui对表单的提交进行了封装,提交的方式采用的是ajax的方式,在开发的时候应该注意的事项如下:
1、在定义form标签的时候,要将method属性设置成post或者get,特别是进行大字段的文本信息提交的时候,要将method设置成post方式提交,否则页面会抛出跨域访问等异常。所以这个要
Trie tree(字典树)的Java实现及其应用-统计以某字符串为前缀的单词的数量
bylijinnan
java实现
import java.util.LinkedList;
public class CaseInsensitiveTrie {
/**
字典树的Java实现。实现了插入、查询以及深度优先遍历。
Trie tree's java implementation.(Insert,Search,DFS)
Problem Description
Igna
html css 鼠标形状样式汇总
chenbowen00
html css
css鼠标手型cursor中hand与pointer
Example:CSS鼠标手型效果 <a href="#" style="cursor:hand">CSS鼠标手型效果</a><br/>
Example:CSS鼠标手型效果 <a href="#" style=&qu
[IT与投资]IT投资的几个原则
comsci
it
无论是想在电商,软件,硬件还是互联网领域投资,都需要大量资金,虽然各个国家政府在媒体上都给予大家承诺,既要让市场的流动性宽松,又要保持经济的高速增长....但是,事实上,整个市场和社会对于真正的资金投入是非常渴望的,也就是说,表面上看起来,市场很活跃,但是投入的资金并不是很充足的......
oracle with语句详解
daizj
oracle with with as
oracle with语句详解 转
在oracle中,select 查询语句,可以使用with,就是一个子查询,oracle 会把子查询的结果放到临时表中,可以反复使用
例子:注意,这是sql语句,不是pl/sql语句, 可以直接放到jdbc执行的
----------------------------------------------------------------
hbase的简单操作
deng520159
数据库 hbase
近期公司用hbase来存储日志,然后再来分析 ,把hbase开发经常要用的命令找了出来.
用ssh登陆安装hbase那台linux后
用hbase shell进行hbase命令控制台!
表的管理
1)查看有哪些表
hbase(main)> list
2)创建表
# 语法:create <table>, {NAME => <family&g
C语言scanf继续学习、算术运算符学习和逻辑运算符
dcj3sjt126com
c
/*
2013年3月11日20:37:32
地点:北京潘家园
功能:完成用户格式化输入多个值
目的:学习scanf函数的使用
*/
# include <stdio.h>
int main(void)
{
int i, j, k;
printf("please input three number:\n"); //提示用
2015越来越好
dcj3sjt126com
歌曲
越来越好
房子大了电话小了 感觉越来越好
假期多了收入高了 工作越来越好
商品精了价格活了 心情越来越好
天更蓝了水更清了 环境越来越好
活得有奔头人会步步高
想做到你要努力去做到
幸福的笑容天天挂眉梢 越来越好
婆媳和了家庭暖了 生活越来越好
孩子高了懂事多了 学习越来越好
朋友多了心相通了 大家越来越好
道路宽了心气顺了 日子越来越好
活的有精神人就不显
java.sql.SQLException: Value '0000-00-00' can not be represented as java.sql.Tim
feiteyizu
mysql
数据表中有记录的time字段(属性为timestamp)其值为:“0000-00-00 00:00:00”
程序使用select 语句从中取数据时出现以下异常:
java.sql.SQLException:Value '0000-00-00' can not be represented as java.sql.Date
java.sql.SQLException: Valu
Ehcache(07)——Ehcache对并发的支持
234390216
并发 ehcache 锁 ReadLock WriteLock
Ehcache对并发的支持
在高并发的情况下,使用Ehcache缓存时,由于并发的读与写,我们读的数据有可能是错误的,我们写的数据也有可能意外的被覆盖。所幸的是Ehcache为我们提供了针对于缓存元素Key的Read(读)、Write(写)锁。当一个线程获取了某一Key的Read锁之后,其它线程获取针对于同
mysql中blob,text字段的合成索引
jackyrong
mysql
在mysql中,原来有一个叫合成索引的,可以提高blob,text字段的效率性能,
但只能用在精确查询,核心是增加一个列,然后可以用md5进行散列,用散列值查找
则速度快
比如:
create table abc(id varchar(10),context blog,hash_value varchar(40));
insert into abc(1,rep
逻辑运算与移位运算
latty
位运算 逻辑运算
源码:正数的补码与原码相同例+7 源码:00000111 补码 :00000111 (用8位二进制表示一个数)
负数的补码:
符号位为1,其余位为该数绝对值的原码按位取反;然后整个数加1。 -7 源码: 10000111 ,其绝对值为00000111 取反加一:11111001 为-7补码
已知一个数的补码,求原码的操作分两种情况:
利用XSD 验证XML文件
newerdragon
java xml xsd
XSD文件 (XML Schema 语言也称作 XML Schema 定义(XML Schema Definition,XSD)。 具体使用方法和定义请参看:
http://www.w3school.com.cn/schema/index.asp
java自jdk1.5以上新增了SchemaFactory类 可以实现对XSD验证的支持,使用起来也很方便。
以下代码可用在J
搭建 CentOS 6 服务器(12) - Samba
rensanning
centos
(1)安装
# yum -y install samba
Installed:
samba.i686 0:3.6.9-169.el6_5
# pdbedit -a rensn
new password:123456
retype new password:123456
……
(2)Home文件夹
# mkdir /etc
Learn Nodejs 01
toknowme
nodejs
(1)下载nodejs
https://nodejs.org/download/ 选择相应的版本进行下载 (2)安装nodejs 安装的方式比较多,请baidu下
我这边下载的是“node-v0.12.7-linux-x64.tar.gz”这个版本 (1)上传服务器 (2)解压 tar -zxvf node-v0.12.
jquery控制自动刷新的代码举例
xp9802
jquery
1、html内容部分 复制代码代码示例: <div id='log_reload'>
<select name="id_s" size="1">
<option value='2'>-2s-</option>
<option value='3'>-3s-</option