<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                在web項目中引入spring框架中的配置文件,我們給每一個java bean進行相關配置可以非常安全,便捷的管理我們的bean。那么,問題來了,如果一個項目中所涉及到的java bean十分龐大,而且每一個bean中的配置都是大同小異的,那么這份applicationContext.xml文件恐怕是無能為力了。接下來,我們使用spring的注解便可以很好的解決這一問題。 首先:我們瀏覽一下我們原始的applicationContext.xml中的部分配置 ~~~ <bean id="myNewsAction" class="news.action.NewsAction" scope="prototype"> <property name="ns" ref="myNewsService"></property> </bean> <bean id="myNewsService" class="news.service.NewsServiceImpl" scope="prototype"> <property name="nd" ref="myNewsDao"></property> </bean> <bean id="myNewsDao" class="news.dao.NewsDaoImpl" scope="prototype"> <property name="sf" ref="mySessionFactory"></property> </bean> ~~~ 解析:在這個代碼段中我們可以看出,我們的控制器也就是我們的action訪問的是我們的service層,而service層則是訪問的數據層dao。在這種傳統的寫法中每個類有什么屬性要注入非常明顯,而今天我們要做的就是要簡化這份配置文件。 接下來:如果我們把這份配置文件簡化成這樣 ~~~ <bean id="myNewsAction" class="news.action.NewsAction" scope="prototype"></bean> <bean id="myNewsService" class="news.service.NewsServiceImpl" scope="prototype"></bean> <bean id="myNewsDao" class="news.dao.NewsDaoImpl" scope="prototype"></bean> ~~~ 解析:我們只是綁定了每個bean,但是并沒有為其注入屬性。其實我們是用到了spring的@Autowired,@Qualifier這兩個注解 ~~~ @Autowired @Qualifier("mySessionFactory") private SessionFactory sf; ~~~ 解析:在@Qualifier這個注解中我們申明其引用的是哪一個bean,spring便會自動為其注入這個實例,并且屬性的set方法也可省略 但是:經過上面的一番操作仿佛沒有給我省多少事,別急,認真看完本篇博客的人才知道有用的東西在最后。哈哈哈! ~~~ <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context" xmlns:jee="http://www.springframework.org/schema/jee" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation=" http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.2.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-4.2.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.2.xsd"> <!-- 基于news這個包自動掃描其中的類 ,也會自動注入解析器--> <context:component-scan base-package="news"></context:component-scan> <!-- 引入外部屬性文件 --> <context:property-placeholder location="classpath:jdbc.properties" /> <bean id="mySessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean"> </bean> <bean id="myDataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"> </bean> </beans> ~~~ 解析:從這份applicationContext.xml文件中我們可以明顯的看到我們壓根沒有給我們的java bean進行相關配置,只是配置了一些基本的數據源。唯一多了一行 `<context:component-scan base-package="news"></context:component-scan>`通過這個節點的base-package屬性可以配置spring需要自動注入的哪個基包。 此時便是spring的@Controller @Service @Repository這三個注解起作用的時候了 ~~~ @Controller("myNewsAction") @Scope("prototype") public class NewsAction extends ActionSupport { @Autowired @Qualifier("myNewsService") private NewsService ns; ~~~ ~~~ @Service("myNewsService") @Scope("prototype") public class NewsServiceImpl implements NewsService { @Autowired @Qualifier("myNewsDao") private NewsDao nd; ~~~ ~~~ @Repository("myNewsDao") @Scope("prototype") public class NewsDaoImpl implements NewsDao { @Autowired @Qualifier("mySessionFactory") private SessionFactory sf; ~~~ 解析:①,注解@Controller為我們的控制器action類的類注解相當于applicationContext.xml文件中的bean節點,而括號中的值相當于bean節點中的id屬性的屬性值。同理:@Service為我們業務層的類注解,@Repository為數據層dao的類注解。 ②,注解 @Scope("prototype") 相當于applicationContext.xml文件中bean節點中scope屬性,這個非單例模式注解十分重要,主要起到線程安全,防止并發操作時出現異常的作用 小結:使用spring的類注解和屬性注解確實能給我們帶來許多便利,關于類屬性的注解其實jdk javax.annotation.Resource包中便有@Resource注解。所以,我們當然也可以選擇使用jdk的注解,不過要注意的是,千萬不要把jdk的注解和spring的注解混用。在軟件系統中,由于原生的jdk難免存在一些缺陷,我們在開發過程中往往需要引入各種框架,因此我們的項目便不得不與這些框架耦合在一起。雖然我們一直不希望我們的代碼出現耦合,畢竟這只是一種理想狀態。總之,輕度耦合一直是我們追求的代碼風格。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看