• “两学一做”在山西——黄河新闻网 2019-07-13
  • 内地生报读香港高校本科人数持续下跌 2019-07-13
  • 【学习时刻】人民大学王义桅:金砖合作的“自信”与“自觉” 2019-07-12
  • 女子请“私家侦探”被骗3万 警方循线捣毁诈骗团伙 2019-07-11
  • 【学习时刻】北交大马院院长韩振峰:高校思想政治工作必须牢牢把握三大根本问题 2019-07-11
  • 全国“非遗”保护工作先进名单公布 2019-07-01
  • 紫光阁中共中央国家机关工作委员会 2019-06-25
  • 杭州控烟令修改草案拟允许室内设吸烟区,控烟专家:跌破眼镜 2019-06-25
  • 挪用近30万报纸征订款赌博 河南一报社聘用制干部获刑 2019-06-23
  • 2016年,有1145家上市公司大小非减持了3600亿元,还有210名上市公司高管减持了1400亿元。IPO已成了造就成千上万个十亿、百亿富豪的捷径, 2019-06-21
  • 专家“把脉”中国电影市场:提升品质方能逆袭 2019-06-21
  • “善款资助副局长儿子留学”真相须尽快落地 2019-06-19
  • 21岁女护士失联2天后确认遇害 嫌疑人为其前男友 2019-06-19
  • 中国地质公园名录旅行地中国国家地理网 2019-06-13
  • 玄关运用有四大原则 用的好才能财旺挡煞聚财 ——凤凰网房产 2019-06-10
  • Spring入门配置(一) - IOC

    一、初始命名空间配置 

     广东十一选5一定牛 www.aavbg.com <beans xmlns="//www.springframework.org/schema/beans"
           xmlns:xsi="//www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation:"
               //www.springframework.org/schema/beans
           //www.springframework.org/schema/beans/spring-beans.xsd"> 
    </beans>

     

       xsi:xml schema instance,schema的作用是用来对xml文档做约束保证xml文档的正确性。(对XML部分重新学习)

    参考:schema的几个重要知识:https://blog.csdn.net/weixin_39366489/article/details/78115306

    二、Spring开发基本包坐标

    <properties>
        <spring.version>5.0.5.RELEASE</spring.version>
    </properties>
    
    <dependencies>
    <!--导入spring的context坐标,context依赖core、beans、expression-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>${spring.version}</version>
        </dependency>
    </dependencies>

     三、Bean标签配置

    Spring中Bean的命名

    1. 每个Bean可以有一个id属性,并可以根据该id在IoC容器中查找该Bean,该id属性值必须在IoC容器中唯一;
    2. 可以不指定id属性,只指定全限定类名,如:
      <bean class="com.zyh.spring3.hello.StaticBeanFactory"></bean>

      此时需要通过接口getBean(Class<T> requiredType)来获取Bean;
      如果该Bean找不到则抛异常:NoSuchBeanDefinitionException
      如果该类型的Bean有多个则抛异常:NoUniqueBeanDefinitionException

    3. 如果不指定id,只指定name,那么name为Bean的标识符,并且需要在容器中唯一;
    4. 同时指定name和id,此时id为标识符,而name为Bean的别名,两者都可以找到目标Bean;
    --------------------------------------------------------------------------------------------------------------
    原文:https://blog.csdn.net/guan3515/article/details/85675419 
    1. 无参构造实例化对象

      <!--id为Bean在Spring容器中的唯一标识-->
      <bean id="userService" class="GroupId.ArtifactId.service.impl.UserServiceImpl" scope="singleton">
      <!--class为Bean全限定名-->
      <!--scope指定对象作用范围,singleton为默认值单例,prototype为多例,request、session、global session表示WEB项目中Spring创建一个Bean对象并存到相应的域中-->
      <!--init-method、destroy-method用于指定类中的初始化方法和销毁方法-->
      </bean>
    2. 工厂静态方法实例化

      <bean id="userDao" class="GroupId.ArtifactId.factory.StaticFactoryBean" factory-method="createUserDao" />
    3. 工厂实例方法实例化

      <bean id="factoryBean" class="GroupId.ArtifactId.factory.DynamicFactoryBean" />
      <bean id="userDao" factory-bean="factoryBean" factory-method="createUserDao" />

        GroupId和ArtifactId统称为“坐标”,保证项目的唯一性

        GroupId:一般分多段,主要有两段,第一段为域,第二段为公司名称或其他。域org(非盈利组织)、com(商业组织)、cn(中国)等

        ArtifactId:项目名称

    四、Bean依赖注入

      依赖注入(Dependency Injection),Spring核心 IOC(Inversion Of Control) 的具体实现,程序中由Spring创建对象,降低耦合关系。

    1. set方式依赖注入及简单的set方式 >> P命名空间注入 

      <!--UserServiceImpl中添加USerDaoImpl私有属性,设置set方法-->
      <!--将UserDaoImpl注入到Spring容器中-->
      <bean id="userDao" class="UserDaoImpl全限定名(fully-qualified name)">
      <!--将UserServiceImpl注入到Spring,将USerDaoImpl注入到UserServiceImpl-->
      <bean id="userService" class="UserServiceImpl fully-qualified name">
          <property name="userDao" ref="userDao" />
          <!--name值为set方法出去set并将首字母小写转换后的字符串,ref表示注入到UserServiceImpl类在容器中的id-->
      </bean>
      
      -------------------------------------------------------------------------------------
      
      <!--P命名空间注入也是set方法注入,但比较方便,需要引入P命名空间-->
      <beans xmlns="//www.springframework.org/schema/beans"
             xmlns:p="//www.springframework.org/schema/p" 
             xsi:schemaLocation:"
                 //www.springframework.org/schema/beans
                 //www.springframework.org/schema/beans/spring-beans.xsd
                 //www.springframework.org/schema/p
                 //www.springframework.org/schema/p/spring-p.xsd"> 
        <bean id="userService" class="UserService fully-qualified name" p:userDao-ref="userDao" />
      </beans>      

      1.1 注入普通数据类型     

      <bean id="userDao" class="UserDaoImpl fully-qualified name">
          <property name="set方法转换后的值" value="注入变量值" />
      </bean>

      1.2 注入引用数据类型
      1.3 注入集合数据类型 --> 主要决定于集合中存储的类型,基本数据类型或String等配置value相关,对象配置ref相关引用Spring容器中的对象

      <!--list集合存储String或基本数据类型-->
      <bean id="userDao" class="UserDaoImpl fully-qualified name">
          <property name="set方法转换值">
              <list>
                  <value>aaa</value>
                  <value>bbb</value>
              </list>
          </property>
      </bean>
      
      --------------------------------------------------------------------
      
      <!--list集合存储实例对象 User-->
      <!--集合中存储实例对象其实都是Spring容器中的引用,即id标识-->
      <bean id="u1" class="User fully-qualified name">
      <bean id="u2" class="User fully-qualified name">
      <bean id="userDao" class="UserDaoImpl fully-qualified name">
          <property name="set方法转换值">
              <list>
                  <bean class="User fully-qualified name" />
                  <bean class="User fully-qualified name" />
                  <ref bean="u1" />
                  <ref bean="u2" />
              </list>
          </property>
      </bean>
      
      --------------------------------------------------------------------
      
      <!--Map集合的注入-->
      <bean id="u1" class="User fully-qualified name">
      <bean id="u2" class="User fully-qualified name">
      <bean id="userDao" class="UserDaoImpl fully-qualified name">
          <property name="set方法转换值">
              <map>
                  <entry key="user1" value-ref="u1" />
                  <entry key="user2" value-ref="u2" />
              </map>
          </property>
      </bean>
      
      --------------------------------------------------------------------
      
      <!--properties 集合-->
      <bean id="userDao" class="UserDaoImpl fully-qualified name">
          <property name="set方法转换值">
              <props>
                  <prop key="p1">aaa</prop>
                  <prop key="p2">bbb</prop>
                  <prop key="p3">ccc</prop>
              </props>
          </property>
      </bean>
    2. 构造方法依赖注入

      <!--不再配置property,配置如下标签-->
      <constructor-arg name="有参构造函数形参变量名" ref="注入Spring容器的形参id"></constructor-arg>

    五、应用 --> 数据源的配置及JdbcTemplate基本使用

       数据源的相关参数设置方法均为setXxx方法,数据源对象利用空参构造函数生成,具备此特性可将对象交由Spring管理。将数据源的数据配置到配置文件中

    1. Druid和C3P0参数设置方法

      Druid C3P0

      setDriverClassName("com.mysql.jdbc.Driver")

      setUrl("jdbc:mysql://localhost:3306/test")

      setUsername("root")

      setPassword("root")

      setDriverClass("com.mysql.jdbc.Driver")

      setJdbcUrl("jdbc:mysql://localhost:3306/test")

      setUser("root")

      setPassword("root")









    2. 导入数据源和数据库驱动相关坐标:Druid/C3P0 + mysql-connector-java

    3. 提取jdbc配置到文件jdbc.properties

      jdbc.driver=com.mysql.jdbc.Driver
      jdbc.url=jdbc:mysql://localhost:3306/test
      jdbc.username=root
      jdbc.password=root
    4. 在Spring配置文件中加载jdbc.properties文件,获取jdbc配置文件信息,需要引入context命名空间和约束路径

      命名空间:
      xmlns:context="//www.springframework.org/schema/context"
      约束路径:
      //www.springframework.org/schema/context
      //www.springframework.org/schema/context/spring-context.xsd
    5. <!--配置Spring配置文件-->
      <context:property-placeholder location="classpath:jdbc.properties"/> <!--placeholder:占位符-->
      <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
          <property name="driverClass" value="${jdbc.driver}"/>
          <property name="jdbcUrl" value="${jdbc.url}"/>
          <property name="user" value="${jdbc.username}"/>
          <property name="password" value="${jdbc.password}"/>
      </bean>
    6. JdbcTemplate基本使用

      1. 导入坐标:spring-jdbc & spring-tx
      2. 配置JdbcTemplate向其注入DataSource
        <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
            <property name="dataSource" ref="dataSource"></property>
        </bean>

    六、配置文件及创建ApplicationContext实现类对象时参数的抽取

    1. 配置文件抽取

      实际开发中,Spring的配置内容非常多,这就导致Spring配置很繁杂且体积很大,所以,可以将部分配置拆解到其他配置文件中,而在Spring主配置文件通过import标签进行加载
      <import resource="applicationContext-xxx.xml"/>
    2. 参数抽取

     ApplicationContext实现类主要有以下三种:

       1)ClassPathXmlApplicationContext 它是从类的根路径下加载配置文件 推荐使用这种;

       2)FileSystemXmlApplicationContext 它是从磁盘路径上加载配置文件,配置文件可以在磁盘的任意位置;

       3)AnnotationConfigApplicationContext 当使用注解配置容器对象时,需要使用此类来创建 spring 容器。它用来读取注解。

       可以通过其实例的getBean()方法获得 Spring 容器中的 Bean 对象:

       ① 当参数的数据类型是字符串时,表示根据Bean的id从容器中获得Bean实例,返回是Object,需要强转。

       ② 当参数的数据类型是Class类型时,表示根据类型从容器中匹配Bean实例,当容器中相同类型的Bean有多个时,则此方法会报错?!    ?/p>

       开发中每次获取实例对象前都需要进行ApplicationContext实现类实例的创建获取,且参数名为配置文件名与代码耦合度较高,Spring中进行抽取。

       在Web项目中,可以使用ServletContextListener监听Web应用的启动,我们可以在Web应用启动时,就加载Spring的配置文件,创建应用上下文对象ApplicationContext,在将其存储到最大的域servletContext域中,这样就可以在任意位置从域中获得应用上下文ApplicationContext实现类对象了。Spring提供了一个监听器ContextLoaderListener就是对上述功能的封装,该监听器内部加载Spring配置文件,创建应用上下文对象,并存储到ServletContext域中,提供了一个客户端工具WebApplicationContextUtils供使用者获得应用上下文对象。
       Ⅰ. 导包:spring-web
       Ⅱ. web.xml中配置监听器 ContextLoaderListener

    <!--全局参数-->
    <context-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath:applicationContext.xml</param-value>
    </context-param>
    <!--Spring的监听器-->
    <listener>
        <listener-class>
           org.springframework.web.context.ContextLoaderListener
        </listener-class>
    </listener>

       Ⅲ. WebApplicationContextUtils工具类获取ApplicationContext实现类对象传入servletContext

    ApplicationContext applicationContext = WebApplicationContextUtils.getWebApplicationContext(servletContext);
    Object obj = applicationContext.getBean("id"); 

    七、注解开发

      需要在配置文件中开启组建扫描

      <context:component-scan base-package=“包全限定名"/> 
    1. 原始注解

    2. 新注解

      /*
      @Configuration
      @ComponentScan
      @Import
      */
      @Configuration
      @ComponentScan("需要被扫描类所在包名")
      @Import({DataSourceConfiguration.class})
      public class SpringConfiguration {
      
      }
      
      ---------------------------------------------------
      
      /*
      @PropertySource
      @value
      */
      @PropertySource("classpath:jdbc.properties")
      public class DataSourceConfiguration {
          @Value("${jdbc.driver}")
          private String driver;
          @Value("${jdbc.url}")
          private String url;
          @Value("${jdbc.username}")
          private String username;
          @Value("${jdbc.password}")
          private String password;
      }
      
      ---------------------------------------------------
      
      @Bean(name="dataSource")
      public DataSource getDataSource() throws PropertyVetoException {
          ComboPooledDataSource dataSource = new ComboPooledDataSource();
          dataSource.setDriverClass(driver);
          dataSource.setJdbcUrl(url);
          dataSource.setUser(username);
          dataSource.setPassword(password);
          return dataSource;
      }    

      ---------------------------------------------------

      @Test
      public void testAnnoConfiguration() throws Exception {
      ApplicationContext applicationContext = new AnnotationConfigApplicationContext(SpringConfiguration.class);
      UserService userService = (UserService)applicationContext.getBean("userService");
      userService.save();
      DataSource dataSource = (DataSource)applicationContext.getBean("dataSource");
      Connection connection = dataSource.getConnection();
      System.out.println(connection);
      }
    3. Spring集成Junit步骤

        1. 导入spring集成Junit的坐标:spring-test&junit,此处spring5及以上版本要求junit必须为4.12及以上版本  
        2. 使用 @Runwith(SpringJUnit4ClassRunner.class) 注解替换原来的运行期,指定测试运行环境
        3. 使用 @ContextConfiguration指定配置文件或配置类

    //加载spring核心配置文件
    //@ContextConfiguration(value = {"classpath:applicationContext.xml"})
    //加载spring核心配置类
    @ContextConfiguration(classes = {SpringConfiguration.class})

        4. 使用 @Autowired注入需要测试的对象创建测试方法进行测试

    posted @ 2019-07-10 23:19 想学好Java 阅读(...) 评论(...) 编辑 收藏
  • “两学一做”在山西——黄河新闻网 2019-07-13
  • 内地生报读香港高校本科人数持续下跌 2019-07-13
  • 【学习时刻】人民大学王义桅:金砖合作的“自信”与“自觉” 2019-07-12
  • 女子请“私家侦探”被骗3万 警方循线捣毁诈骗团伙 2019-07-11
  • 【学习时刻】北交大马院院长韩振峰:高校思想政治工作必须牢牢把握三大根本问题 2019-07-11
  • 全国“非遗”保护工作先进名单公布 2019-07-01
  • 紫光阁中共中央国家机关工作委员会 2019-06-25
  • 杭州控烟令修改草案拟允许室内设吸烟区,控烟专家:跌破眼镜 2019-06-25
  • 挪用近30万报纸征订款赌博 河南一报社聘用制干部获刑 2019-06-23
  • 2016年,有1145家上市公司大小非减持了3600亿元,还有210名上市公司高管减持了1400亿元。IPO已成了造就成千上万个十亿、百亿富豪的捷径, 2019-06-21
  • 专家“把脉”中国电影市场:提升品质方能逆袭 2019-06-21
  • “善款资助副局长儿子留学”真相须尽快落地 2019-06-19
  • 21岁女护士失联2天后确认遇害 嫌疑人为其前男友 2019-06-19
  • 中国地质公园名录旅行地中国国家地理网 2019-06-13
  • 玄关运用有四大原则 用的好才能财旺挡煞聚财 ——凤凰网房产 2019-06-10
  • 云南11选5在线购买 广西快3遗漏数据 高频彩假吗 双色球开奖开奖直播现场 六合图库话中有意 网易彩票app下载 德州扑克底牌胜率排行 双色球ac值走势图 甘肃11选5开奖走势图一定牛 开乐彩幸运号码查询 生肖二连码是什么意思 黑龙江36选7开奖规则 内蒙古十一选五6月30日 山东十一选五走势图2元网 12选5浙江爱彩乐