1.今日大纲1、了解Spring的发展2、掌握Spring的java配置方式3、学习SpringBoot4、使用SpringBoot来改造购物车系统访问时代,都是通过xml文件配置bean,随着项目的不断扩大,需要将xml配置分放到不同的配置文件中,需要频繁的在java类和xml配置文件中切换。2.2.Spring2.x时代随着JDK1.5带来的注解支持,Spring2.x可以使用注解对Bean进行申明和注入,大大的减少了xml配置文件,同时也大大简化了项目的开发。那么,问题来了,究竟是应该使用xml还是注解呢?最佳实践:1、应用的基本配置用xml,比如:数据源、资源文件等;2、业务开发用注解,比如:Service中注入bean等;2.3.Spring3.x到Spring4.x从Spring3.x开始提供了Java配置方式,使用Java配置方式可以更好的理解你配置的Bean,现在我们就处于这个时代,并且Spring4.x和Springboot都推荐使用java配置的方式。3.Spring的Java配置方式Java配置是Spring4.x推荐的配置方式,可以完全替代xml配置。3.1.@Configuration和@BeanSpring的Java配置方式是通过@Configuration和@Bean这两个注解实现的:1、@Configuration作用于类上,相当于一个xml配置文件;2、@Bean作用于方法上,相当于xml配置中的bean;3.2.示例该示例演示了通过Java配置的方式进行配置Spring,并且实现了SpringIOC功能。3.2.1.创建工程以及导入依赖projectxmlns=:xsi=:schemaLocation=://maven.apache.org/xsd/maven-4.0.0.xsdmodelVersion4.0.0/modelVersiongroupIdcn.itcast.springboot/groupIdartifactIditcast-springboot/artifactIdversion1.0.0-SNAPSHOT/versionpackagingwar/packagingdependenciesdependencygroupIdorg.springframework/groupIdartifactIdspring-webmvc/artifactIdversion4.3.7.RELEASE/version/dependency!--连接池--dependencygroupIdcom.jolbox/groupIdartifactIdbonecp-spring/artifactIdversion0.8.0.RELEASE/version/dependency/dependenciesbuildfinalName${project.artifactId}/finalNameplugins!--资源文件拷贝插件--plugingroupIdorg.apache.maven.plugins/groupIdartifactIdmaven-resources-plugin/artifactIdconfigurationencodingUTF-8/encoding/configuration/plugin!--java编译插件--plugingroupIdorg.apache.maven.plugins/groupIdartifactIdmaven-compiler-plugin/artifactIdconfigurationsource1.7/sourcetarget1.7/targetencodingUTF-8/encoding/configuration/plugin/pluginspluginManagementplugins!--配置Tomcat插件--plugingroupIdorg.apache.tomcat.maven/groupIdartifactIdtomcat7-maven-plugin/artifactIdversion2.2/version/plugin/plugins/pluginManagement/build/project3.2.2.编写User对象publicclassUser{privateStringusername;privateStringpassword;privateIntegerage;publicStringgetUsername(){returnusername;}publicvoidsetUsername(Stringusername){this.username=username;}publicStringgetPassword(){returnpassword;}publicvoidsetPassword(Stringpassword){this.password=password;}publicIntegergetAge(){returnage;}publicvoidsetAge(Integerage){this.age=age;}}3.2.3.编写UserDAO用于模拟与数据库的交互publicclassUserDAO{publicListUserqueryUserList(){ListUserresult=newArrayListUser();//模拟数据库的查询for(inti=0;i10;i++){Useruser=newUser();user.setUsername(username_+i);user.setPassword(password_+i);user.setAge(i+1);result.add(user);}returnresult;}}3.2.4.编写UserService用于实现User数据操作业务逻辑@ServicepublicclassUserService{@Autowired//注入Spring容器中的bean对象privateUserDAOuserDAO;publicListUserqueryUserList(){//调用userDAO中的方法进行查询returnthis.userDAO.queryUserList();}}3.2.5.编写SpringConfig用于实例化Spring容器@Configuration//通过该注解来表明该类是一个Spring的配置,相当于一个xml文件@ComponentScan(basePackages=cn.itcast.springboot.javaconfig)//配置扫描包publicclassSpringConfig{@Bean//通过该注解来表明是一个Bean对象,相当于xml中的beanpublicUserDAOgetUserDAO(){returnnewUserDAO();//直接new对象做演示}}3.2.6.编写测试方法用于启动Spring容器publicclassMain{publicstaticvoidmain(String[]args){//通过Java配置来实例化Spring容器AnnotationConfigApplicationContextcontext=newAnnotationConfigApplicationContext(SpringConfig.class);//在Spring容器中获取Bean对象UserServiceuserService=context.getBean(UserService.class);//调用对象中的方法ListUserlist=userService.queryUserList();for(Useruser:list){System.out.println(user.getUsername()+,+user.getPassword()+,+user.getPassword());}//销毁该容器context.destroy();}}3.2.7.测试效果3.2.8.小结从以上的示例中可以看出,使用Java代码就完美的替代xml配置文件,并且结构更加的清晰。3.3.实战3.3.1.读取外部的资源配置文件通过@PropertySource可以指定读取的配置文件,通过@Value注解获取值,具体用法:@Configuration//通过该注解来表明该类是一个Spring的配置,相当于一个xml文件@ComponentScan(basePackages=cn.itcast.springboot.javaconfig)//配置扫描包@PropertySource(value={classpath:jdbc.properties})publicclassSpringConfig{@Value(${jdbc.url})privateStringjdbcUrl;@Bean//通过该注解来表明是一个Bean对象,相当于xml中的beanpublicUserDAOgetUserDAO(){returnnewUserDAO();//直接new对象做演示}}思考:1、如何配置多个配置文件?2、如果配置的配置文件不存在会怎么样?3.3.2.配置数据库连接池导入依赖:!--连接池--dependencygroupIdcom.jolbox/groupIdartifactIdbonecp-spring/artifactIdversion0.8.0.RELEASE/version/dependency之前的Springxml配置:!--定义数据源--beanid=dataSourceclass=com.jolbox.bonecp.BoneCPDataSourcedestroy-method=close!--数据库驱动--propertyname=driverClassvalue=${jdbc.driverClassName}/!--相应驱动的jdbcUrl--propertyname=jdbcUrlvalue=${jdbc.url}/!--数据库的用户名--propertyname=usernamevalue=${jdbc.username}/!--数据库的密码--propertyname=passwordvalue=${jdbc.password}/!--检查数据库连接池中空闲连接的间隔时间,单位是分,默认值:240,如果要取消则设置为0--propertyname=idleConnectionTestPeriodvalue=60/!--连接池中未使用的链接最大存活时间,单位是分,默认值:60,如果要永远存活设置为0--propertyname=idleMaxAgevalue=30/!--每个分区最大的连接数--!--判断依据:请求并发数--propertyname=maxConnectionsPerPartitionvalue=100/!--每个分区最小的连接数--propertyname=minConnectionsPer