`
hideto
  • 浏览: 2651939 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Spring JavaConfig参考文档

    博客分类:
  • Java
阅读更多
Spring JavaConfig参考文档
Spring JavaConfig Reference Documentation
Rod Johnson
Costin Leau
version 1.0-m2
Copies of this document may be made for your own use and for distribution to others, provided that you do not
charge any fee for such copies and further provided that each copy contains this Copyright Notice, whether
distributed in print or electronically.
2007.05.08


目录
1. 介绍
2. 组件
  2.1 @Configuration
  2.2 @Bean
  2.3 @ExternalBean
  2.4 @ScopedProxy
3. Bean可见度
4. 装配依赖
5. 命名策略
6. 混合XM和annotations
7. 使用Java Configuration
8. Roadmap


第一章、介绍
IoC中提到,Spring IoC核心为一个称为bean的概念。
这个概念定义了一个对象被Spring容器初始化、装配和管理的方式。
虽然Spring本身可以从任何metadata读取内容并装换成Java代码,但是XML是描述beans配置最流行的方式。
JDK5+中引入的Annotations允许源代码组件提供额外的metadata,这些metadata可以影响运行时语义。
这让annotations成为一个很好的配置选项。
分享到:
评论
18 楼 maqujun 2007-08-05  
正好在研究spring的这部分内容,多谢分享。
17 楼 liuwangxia 2007-08-05  
carrierlanhai 写道
文章写的不错,这个LOGO看得很不舒服

确实不舒服,让我想起“王开源”博客的 LOGO
16 楼 ixu 2007-07-25  
译的不错,辛苦。

JavaConfig也提供了AOP的注解配置方式,不过文档中还没怎么提,不知道以后会不会替代AspectJ的注解方式
15 楼 carrierlanhai 2007-07-23  
文章写的不错,这个LOGO看得很不舒服
14 楼 jvincent 2007-07-21  
期待中,可以省去配置xml文件的麻烦了。主要是xml文件的配置形式不能使用到java的类型检测,容易出错。。
13 楼 xiumu 2007-07-20  
谢谢!
12 楼 westlwt 2007-07-17  
sound interesting
11 楼 hideto 2007-07-17  
JavaConfig和sannotations都以plugins的方式使用,Spring现在还没有集成它们,而JavaConfig是Spring的子项目,Spring要把Annotation配置集成到核心代码的话肯定选择JavaConfig了

你要采用annotation方式配置,就表示接受使用@Configuration
10 楼 hantsy 2007-07-17  
Spring JavaConfig和Spring annotation(http://spring-annotation.dev.java.net)区别在哪儿,Spring 2.1采用的是哪种方式,太乱了,,,
感觉是spring还是要使用Annotation配合xml的方式,xml中写Spring中最基本的bean,Annotation用在自己的Bean上,写一个Configuration太不爽了吧。

还好现在Spring项目还没有用到这些东西
9 楼 hbcui1984 2007-07-16  
不错,学习了
8 楼 laiseeme 2007-07-16  
呵呵 老婆在很烦人么
7 楼 hideto 2007-07-14  
第八章、Roadmap
该project相对来说很年轻,可以认为是beta版(hence, the milestone release)。
后继的开发将关注于自动配置发现和简化。
反馈、八哥和建议在Srping forumSpring issue tracking都是受欢迎的。

译者说:
Spring JavaConfigGoogle Guice的区别主要在于它们两者的IoC理念不同:
JavaConfig说IoC配置是必须无侵入的,所以单独弄了个@Configuration
Guice说IoC配置是应用程序模型的一部分,所以配置都扔在领域模型代码中

最后感谢老婆公司领导命令她今天加班,译者今天才有一天的时间来翻译此文档。
6 楼 hideto 2007-07-14  
七、使用Java Configuration
为了使用annotations来配置我们的程序,我们可以使用:

a, AnnotationApplicationContext
它接收Ant风格模式的类名来搜索annotations:
ApplicationContext config = new AnnotationApplicationContext(SimpleConfiguration.class.getName());
ApplicatonContext aBunchOfConfigs = new AnnotationApplicationContext("**/configuration/*Configuration.class");

这种特有的application context将自动读取classpath下匹配给定模式的类并添加进来作为beans,缺点是这种方式不允许配置实例带参数。

b, Configuration post processor
<beans>
  <!-- Spring configuration -->
  <bean class="org.springframework.samples.petclinic.JdbcConfiguration"/>
  <!-- Java Configuration post processor -->
  <bean class="org.springframework.config.java.process.ConfigurationPostProcessor"/>
</beans>

这种方式允许更多的配置选项,因为它不仅提供对configuration processing(通过ConfigurationPostProcessor)的控制,也提供对配置实例本身。
通过定义configuration为一个bean,Spring容器可以用来配置configuration(设置properties或者使用某个构造方法):
<beans>
<!-- a possible configurable configuration -->
<bean class="org.my.company.cofig.AppConfiguration">
  <property name="env" value="TESTING"/>
  <property name="monitoring" value="true"/>
  <property name="certificates" value="classpath:/META-INF/config/MyCompany.certs"/>
</bean>

<!-- Java Configuration post processor -->
<bean class="org.springframework.config.java.process.ConfigurationPostProcessor"/>
</beans>
5 楼 hideto 2007-07-14  
六、混合XML和annotations
Java和XML配置不是互斥的--它们可以同时在同一Spring程序里使用。为了从一个XML文件得到bean,我们需要使用Spring容器。
前面提到,我们可以使用@ExternalBean标记(推荐方式)。
当这种方式不适用时,可以访问@Configuration类使用的底层beanFactory。
这可以通过继承ConfigurationSupport或实现BeanFactoryAware接口来实现。
考虑下面的XML配置:
<bean id="myBean" class="MyBean"/>

为了引用myBean这个bean,我们可以使用下面的代码片段:
@Configuration
public class MyConfig extends ConfigurationSupport {
  @Bean
  public ExampleBean anotherBean() {
    ExampleBean bean = new ExampleBean("anotherBean");
    bean.setDep(getBean("myBean")); // use utility method to get a hold of 'myBean'
    return bean;
  }
}

@Configuration
public class MyOtherConfig implements BeanFactoryAware {
  private BeanFactory beanFactory;

  public void setBeanFactory(BeanFactory beanFactory) {
    // get access to the owning bean factory
    this.beanFactory = beanFactory;
  }

  @Bean
  public ExampleBean yetAnotherBean() {
    ExampleBean bean = new ExampleBean("yetAnotherBean");
    bean.setDep(beanFactory.getBean("myBean")); // use dependency lookup
    return bean;
  }
}

在使用ConfigurationSupport或BeanFactoryAware之前请三思,因为@ExternalBean以重构更友好的方式提供同样的功能。
JavaConfig发布时包含了一个Petclinic示例,它使用Java和Groovy来替换部分XML配置--请参考示例程序获得更多信息。
4 楼 hideto 2007-07-14  
五、命名策略
到目前为止,上面所有的例子里,bean的名字都来自于方法名:
@Configuration
public class ColorsConfiguration {
  // create a bean with name 'blue'
  @Bean
  public Color blue() {
    ...
  }
  ...
}

// dependency lookup for the blue color
applicationContext.getBean("blue");

在某些情况下,以方法名作为同样的bean名字并不合适,不同的类将覆盖定义。
为了定制该行为,我们可以实现BeanNamingStrategy接口来提供自己的名字生成策略。
但是,在写你自己的代码之前,看看默认实现MethodNameStrategy提供的选项:
<!-- Java Configuration post processor -->
<bean class="org.springframework.config.java.process.ConfigurationPostProcessor">
  <property name="namingStrategy">
    <bean class="org.springframework.config.java.naming.MethodNameStrategy">
      <property name="prefix" value="CLASS"/>
    </bean>
  </property>
</bean>

这样配置后,bean的名字将为bean创建方法加上class名前缀:
// dependency lookup for the blue color using the new naming scheme
applicationContext.getBean("ColorsConfiguration.blue");
3 楼 hideto 2007-07-14  
四、装配依赖
为了装配一个bean,通常需要简单的使用Java提供的constructs:
@Bean(scope = DefaultScopes.SINGLETON)
public Person rod() {
  return new Person("Rod Johnson");
}

@Bean(scope = DefaultScopes.PROTOTYPE)
public Book book() {
  Book book = new Book("Expert one-on-one J2EE Design and Development");
  book.setAuthor(rod()); // rod() method is actually a bean reference !
  return book;
}

上面的例子中,book的author使用rod方法的返回值。
但是,由于book和rod方法都被@Bean标记,结果得到的Spring管理的beans将遵循容器语义: rod bean将是singleton而book bean将是prototype。
当创建配置时,Spring知道annotation context并且将用名为"rod"的bean的引用来代替rod()方法。
每次book bean被请求时容器将返回一个新的Book实例(prototype),但是对rod bean则将返回同一实例(singleton)。
上面的代码等同于:
<bean id="rod" class="Person" scope="singleton">
  <constructor-arg>Rod Johnson</constructor-arg>
</bean>

<bean id="book" class="Book" scope="prototype">
  <constructor-arg>Expert One-on-On J2EE Design and Development</constructor-arg>
  <property name="author" ref="rod" />
</bean>

注意上面的例子使用两个常见的scopes类型,而任何类型的scoping都可以被指定:
@Bean (scope = "customer")
public Bag shopingBag() {
  return new Basket();
}

@Bean (scope = "shift")
public Manager shopManager() {
  ...
}
2 楼 hideto 2007-07-14  
第三章、Bean可见度
JavaConfig的一个很好的特性是bean可见度。
JavaConfig使用方法可见度修饰符来决定从该方法得到的bean是否可以通过owning application context/bean factory来访问。
考虑如下配置:
@Configuration
public abstract class VisibilityConfiguration {
  @Bean
  public Bean publicBean() {
    Bean bean = new Bean();
    bean.setDependency(hiddenBean());
    return bean;
  }

  @Bean
  protected HiddenBean hiddenBean() {
    return new Bean("protected bean");
  }

  @Bean
  private HiddenBean secretBean() {
    Bean bean = new Bean("private bean");
    // hidden beans can access beans defined in the 'owning' context
    bean.setDependency(outsideBean());
  }

  @ExternalBean
  public abstract Bean outsideBean()
}

和如下XML配置一起使用:
<beans>
  <!-- the configuration above -->
  <bean class="my.java.config.VisibilityConfiguration"/>

  <!-- Java Configuration post processor -->
  <bean class="org.springframework.config.java.process.ConfigurationPostProcessor"/>

  <bean id="mainBean" class="my.company.Bean">
    <!-- this will work -->
    <property name="dependency" ref="publicBean"/>
    <!-- this will *not* work -->
    <property name="anotherDependency" ref="hiddenBean"/>
  </bean>
</beans>

JavaConfig遇到如上的配置时,它将创建3个beans: publicBean, hiddenBean和secretBean。
它们是互相可见的,但是在'owning' application context(启动JavaConfig的application context)里创建的beans将只能看到publicBean。
hiddenBean和secretBean只能被在VisibilityConfiguration里创建的beans访问。
任何被@Bean标注的非public方法(protected, private和default)将创建一个'hidden' bean。
在上面的例子里,mainBean使用publicBean和hiddenBean配置。
但是,由于后者是hidden的,在运行时Spring将抛出异常:
org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'hiddenBean' is defined
...
为了提供可见度功能,JavaConfig利用Spring提供的application context hierarchy,将所有的hidden beans放在一个子application context里一个
特殊的配置类里。这样,hidden beans可以访问在父(或owning)context里定义的beans,但是相反不行。
1 楼 hideto 2007-07-14  
第二章、组件
Java Configuration使用annotations来让开发人员不离开Java世界就可以创建和配置beans。
简短来说,开发人员使用Java代码来初始化和配置beans,然后指示容器使用它们。
在继续之前,请注意,Spring仍保持相同的语义,而不管采用何种配置方式: Java或者XML。
让我们看看JavaConfig依赖的最重要的annotations:

2.1 @Configuration
@Configuration标记指示配置类:
@Configuration
public class WebConfiguration {
  // bean definitions follow
}

@Configuration是一个class级别的annotation,它指示了配置里定义的bean的一些默认值。
@Configuration(defaultAutowire = Autowire.BY_TYPE, defaultLazy = Lazy.FALSE)
public classDataSourceConfiguration extends ConfigurationSupport {}

它可以认为是<beans/>标签的替代品。
用@Configuration标注的类继承ConfigurationSupport是明智的,因为该类提供了一些辅助方法。

2.2 @Bean
@Bean的名字暗示了一个bean定义(<bean/>标签),让我们以一个简单的例子开始:
@Bean (scope = DefaultScopes.SESSION)
public ExampleBean exampleBean() {
  return new ExampleBean();
}

上面的代码指示Spring容器使用方法名(作为bean的名字)和返回值(实际的bean实例)来创建一个bean。
该bean拥有session作用域,这意味着调用exampleBean()方法将为每个HTTP会话创建一个新的bean实例。
由于使用纯Java,我们在处理静态方法时没有必要使用factory-method:
@Bean
public ExampleBean exampleBean() {
  return ExampleFactory.createBean();
}

或者使用FactoryBean/MethodInvokingFactoryBean来创建复杂对象:
@Bean(aliases = {"anniversaries"})
public List<Date> birthdays() {
  List<Date> dates = new ArrayList<Date>();
  Calendar calendar = Calendar.getInstance();
  calendar.set(1977, 05, 28);
  dates.add(calendar.getTime());
  dates.add(computeMotherInLawBirthday());
  return dates;
}

@Bean是一个method级别的annotation并指示用来创建和配置一个bean实例的Java代码。
该标记支持XML bean定义的大部分选项,如autowiringlazy-initdependency-checkdepends-onscoping
并且,lifecycle方法和*Aware接口完全支持:
public class AwareBean implements BeanFactoryAware {
  private BeanFactory factory;
  // BeanFactoryAware setter
  public void setBeanFactory(BeanFactory beanFactory) throws BeansException {
    this.factory - beanFactory;
  }
  public void close() {
    // do clean-up
  }
}

@Bean(destroyMethodName = "close", lazy = Lazy.TRUE)
public AwareBean createBeanFactoryAwareBean() {
  return new AwareBean();
}

除了destroyMethodName,@Bean标记也支持initMethodName。

2.3 @ExternalBean
@ExternalBean是一个简单的markup标记,它用来注入在父application context中定义的"外部"beans,让我们看看例子:
@Configuration
public abstract class ExternalBeanConfiguration {
  @Bean
  public TestBean james() {
    TestBean james = new TestBean();
    // inject dependency from ann()
    james.setSpouse(ann());
    return james;
  }

  // Will be taken from the parent context
  @ExternalBean
  public abstract TestBean ann();
}

当JavaConfig遇到@ExternalBean时,它将覆盖该方法,这样任何时候该方法被调用时,将在父application context里查找该方法名的bean。
这样,你的配置保持纯Java和重构友好性。
注意@ExternalBean也在普通方法上工作;上面的例子使用抽象方法来避免写入无法执行的dummy code:
@Configuration
public class ExternalBeanOnNormalMethod {
  @ExternalBean
  public TestBean ann() {
    System.out.println("this code will not execute as the method " +
      "will be overriden with a bean look up at runtime");
  }
}


2.4 @ScopedProxy
Spring通过使用scoped proxies来提供方便的方式与scoped dependencies工作。
当使用XML配置时创建这样的proxy最简单的方式为<aop:scoped-proxy/>元素。
JavaConfig提供@ScopedProxy标记作为替换品,它提供相同的语义和配置选项。
参考文档里XML scoped proxy的例子在JavaConfig里看起来像这样:
// a HTTP Session-scoped bean exposed as a proxy
@Bean(scope = DefaultScopes.SESSION)
@ScopedProxy
public UserPreferences userPreferences() {
  return new UserPreferences();
}

@Bean
public Service userService() {
  UserService service = new SimpleUserService();
  // a reference to the proxied 'userPreferences' bean
  service.setUserPreferences(userPreferences());
  return service;
}

相关推荐

    setuptools-40.7.3-py2.py3-none-any.whl

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    Centos7-离线安装redis

    Centos7-离线安装redis

    setuptools-39.0.1-py2.py3-none-any.whl

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    基于JSP实现的在线仓库管理系统源码.zip

    这个是一个JSP实现的在线仓库管理系统,管理员角色包含以下功能:仓库管理员登录,货品&amp;类别信息管理,采购信息管理,出库和入库管理,财务信息管理,管理员管理等功能。 本项目实现的最终作用是基于JSP实现的在线仓库管理系统 分为1个角色 第1个角色为管理员角色,实现了如下功能: - 仓库管理员登录 - 出库和入库管理 - 管理员管理 - 财务信息管理 - 货品&类别信息管理 - 采购信息管理

    基于springboot的房屋租赁系统

    开发语言:Java JDK版本:JDK1.8(或11) 服务器:tomcat 数据库:mysql 5.6/5.7(或8.0) 数据库工具:Navicat 开发软件:idea 依赖管理包:Maven 代码+数据库保证完整可用,可提供远程调试并指导运行服务(额外付费)~ 如果对系统的中的某些部分感到不合适可提供修改服务,比如题目、界面、功能等等... 声明: 1.项目已经调试过,完美运行 2.需要远程帮忙部署项目,需要额外付费 3.本项目有演示视频,如果需要观看,请联系我v:19306446185 4.调试过程中可帮忙安装IDEA,eclipse,MySQL,JDK,Tomcat等软件 重点: 需要其他Java源码联系我,更多源码任你选,你想要的源码我都有! https://img-blog.csdnimg.cn/direct/e73dc0ac8d27434b86d886db5a438c71.jpeg

    setuptools-12.0.2-py2.py3-none-any.whl

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    备自投tp.pptx

    备自投tp.pptx

    setuptools-36.2.1-py2.py3-none-any.whl

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    ai制作动物时装走秀-课程网盘链接提取码下载 .txt

    ai制作动物时装走秀-课程网盘链接提取码下载 .txt

    箱式变压器的基础知识tp.pptx

    箱式变压器的基础知识tp.pptx

    setuptools-0.6b3.zip

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    基于JSP校园二手物品交易信息平台源码.zip

    这个是一个JSP校园二手物品交易信息平台,管理员登录,订单管理,二手交易管理,物品租借管理,物品分类管理,留言板管理,网站公告管理,用户信息管理等功能。用户角色包含以下功能:用户首页,二手物品查看,物品租借查看,优惠活动管理,我的二手交易,加入购物车,查看我的购物车等功能。

    setuptools-25.1.4.tar.gz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    埃森哲--xx市场营销再造项目gltp.pptx

    埃森哲--xx市场营销再造项目gltp.pptx

    基于SpringBoot网上超市管理系统

    大学生毕业设计、大学生课程设计作业

    setuptools-36.6.1-py2.py3-none-any.whl

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    基于python+pyqt的实时数据可视化精密加工机床主轴负载实时监控平台+全部资料齐全+部署文档

    【资源说明】 基于python+pyqt的实时数据可视化精密加工机床主轴负载实时监控平台设计与测试具体实现数据采集与处理、实时数据可视化、数据库整合、用户交互等功能+全部资料齐全+部署文档 【备注】 1、该项目是个人高分项目源码,已获导师指导认可通过,答辩评审分达到95分 2、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 3、本项目适合计算机相关专业(人工智能、通信工程、自动化、电子信息、物联网等)的在校学生、老师或者企业员工下载使用,也可作为毕业设计、课程设计、作业、项目初期立项演示等,当然也适合小白学习进阶。 4、如果基础还行,可以在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 欢迎下载,沟通交流,互相学习,共同进步!

    setuptools-25.1.4-py2.py3-none-any.whl

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    JAVA班主任管理系统(源代码+LW).zip

    JAVA班主任管理系统(源代码+LW).JAVA班主任管理系统(源代码+LW).JAVA班主任管理系统(源代码+LW).JAVA班主任管理系统(源代码+LW).JAVA班主任管理系统(源代码+LW).JAVA班主任管理系统(源代码+LW).JAVA班主任管理系统(源代码+LW).JAVA班主任管理系统(源代码+LW).JAVA班主任管理系统(源代码+LW).JAVA班主任管理系统(源代码+LW).JAVA班主任管理系统(源代码+LW).JAVA班主任管理系统(源代码+LW).JAVA班主任管理系统(源代码+LW).JAVA班主任管理系统(源代码+LW).JAVA班主任管理系统(源代码+LW).JAVA班主任管理系统(源代码+LW).JAVA班主任管理系统(源代码+LW).JAVA班主任管理系统(源代码+LW).JAVA班主任管理系统(源代码+LW).JAVA班主任管理系统(源代码+LW).JAVA班主任管理系统(源代码+LW).JAVA班主任管理系统(源代码+LW).JAVA班主任管理系统(源代码+LW).

    setuptools-20.9.0-py2.py3-none-any.whl

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

Global site tag (gtag.js) - Google Analytics