国产精品chinese,色综合天天综合精品网国产在线,成午夜免费视频在线观看,清纯女学生被强行糟蹋小说

    <td id="ojr13"><tr id="ojr13"><label id="ojr13"></label></tr></td>
        • <source id="ojr13"></source>
            <td id="ojr13"><ins id="ojr13"><label id="ojr13"></label></ins></td>

            Article / 文章中心

            Java學(xué)習(xí)路線-56:Spring與Ioc

            發(fā)布時(shí)間:2021-11-26 點(diǎn)擊數(shù):763

            Spring

            官網(wǎng):https://spring.io/

            理念:使現(xiàn)有技術(shù)更加實(shí)用,本身是大雜燴整合現(xiàn)a有的框架技術(shù)

            優(yōu)點(diǎn):

            1. 輕量級(jí)框架
            2. Ioc 容器-控制反轉(zhuǎn) inversion of Control
            3. Aop 面向切面編程
            4. 對(duì)事務(wù)支持
            5. 對(duì)框架的支持

            一、Ioc 控制反轉(zhuǎn)

            Ioc 是一種編程思想,由主動(dòng)編程變?yōu)楸粍?dòng)接收

            別名:依賴注入 dependency injection

            控制:

            指誰來控制對(duì)象的創(chuàng)建

            傳統(tǒng)的應(yīng)用程序?qū)ο蟮膭?chuàng)建是由程序本身控制的

            使用 spring 之后,由 spring 創(chuàng)建對(duì)象


            反轉(zhuǎn):

            正轉(zhuǎn)指程序來創(chuàng)建對(duì)象

            反轉(zhuǎn)指程序本身不創(chuàng)建對(duì)象,而變成被動(dòng)接受對(duì)象


            總結(jié):

            以前對(duì)象是由程序本身創(chuàng)建,

            使用 spring 之后,程序變?yōu)榻邮?spring 創(chuàng)建好的對(duì)象

            簡單示例

            1、依賴 pom.xml

            <dependency>  <groupId>org.springframework</groupId>  <artifactId>spring-context-support</artifactId>  <version>5.2.6.RELEASE</version> </dependency> <dependency>  <groupId>org.springframework</groupId>  <artifactId>spring-context</artifactId>  <version>5.2.6.RELEASE</version> </dependency> 

            2、Person.java

            package com.pengshiyu.bean;  public class Person {  private String name;    public void setName(String name) {  this.name = name;  }    public void sayHello() {  System.out.println("hello " + this.name);  } } 

            3、beans.xml

            此處是完整寫法,之后將采用簡寫形式

            <?xml version="1.0" encoding="utf-8" ?>  <beans xmlns="http://www.springframework.org/schema/beans"  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  xsi:schemaLocation="http://www.springframework.org/schema/beans  http://www.springframework.org/schema/beans/spring-beans.xsd">  <bean name="person" class="com.pengshiyu.bean.Person">  <property name="name" value="張三" />  </bean> </beans> 

            4、Demo.java

            package com.pengshiyu.spring;  import com.pengshiyu.bean.Person; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext;  public class Demo {  public static void main(String[] args) {  // 解析beans.xml 文件,生成對(duì)應(yīng)的Bean對(duì)象  ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");  Person person = (Person)context.getBean("person");  person.sayHello();  } } 

            二、Dao 管理示例

            Ioc: 對(duì)象由 spring 來創(chuàng)建

            1、UserDao

            package com.spring.dao;  public interface UserDao {  public void getUser(); } 

            2、UserDaoMysqlImpl

            package com.spring.dao.impl;  import com.spring.dao.UserDao;  public class UserDaoMysqlImpl implements UserDao {  @Override  public void getUser() {  System.out.println("Mysql 獲取用戶信息");  } } 

            3、UserDaoOracleImpl

            package com.spring.dao.impl;  import com.spring.dao.UserDao;  public class UserDaoOracleImpl implements UserDao {  @Override  public void getUser() {  System.out.println("Oracle 獲取用戶信息");  } } 

            4、UserService

            package com.spring.service;  public interface UserService {  public void getUser(); } 

            5、UserServiceImpl

            package com.spring.service.impl;  import com.spring.dao.UserDao; import com.spring.service.UserService;  public class UserServiceImpl implements UserService {   private UserDao userDao = null;   public void setUserDao(UserDao userDao) {  this.userDao = userDao;  }   @Override  public void getUser() {  this.userDao.getUser();  } } 

            6、beans.xml(簡化版)

             <beans >  <bean id="mysqlDao" class="com.spring.dao.impl.UserDaoMysqlImpl" />  <bean id="oracleDao" class="com.spring.dao.impl.UserDaoOracleImpl" />  <bean id="service" class="com.spring.service.impl.UserServiceImpl">  <property name="userDao" ref="mysqlDao"></property>  </bean>  </beans> 

            7、TestDemo

            package com.spring.test;  import com.spring.service.UserService; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext;  public class TestDemo {  public static void main(String[] args) {  ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");  UserService service = (UserService)context.getBean("service");  service.getUser();  } } 

            三、使用 Ioc 來創(chuàng)建對(duì)象的 3 種方法

            Person 類

            package com.pengshiyu.bean;  public class Person {   private String name;   public Person() {   }   public Person(String name) {  this.name = name;  }   public void sayHello() {  System.out.println("hello " + this.name);  } }

            創(chuàng)建對(duì)象

            package com.spring.test;   import com.pengshiyu.bean.Person; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext;  public class Demo {  public static void main(String[] args) {  ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");  Person person = (Person) context.getBean("person");  person.sayHello();   } } 

            beans.xml(簡化版)

            1、無參構(gòu)造

            <beans>  <bean name="person" class="com.pengshiyu.bean.Person" /> </beans>

            2、有參構(gòu)造

            (1)根據(jù)參數(shù)下標(biāo)設(shè)置

            <beans>  <bean name="person" class="com.pengshiyu.bean.Person">  <!-- index 構(gòu)造方法下標(biāo)從 0 開始 -->  <constructor-arg index="0" value="Tom" />  </bean> </beans>

            (2)根據(jù)參數(shù)名稱設(shè)置

            <beans>  <bean name="person" class="com.pengshiyu.bean.Person">  <!-- name 參數(shù)名-->  <constructor-arg name="name" value="Tom" />  </bean> </beans>

            3、工廠方法創(chuàng)建

            (1)靜態(tài)工廠

            package com.pengshiyu.factory;  import com.pengshiyu.bean.Person;  public class PersonFactory {  public static Person newInstance(String name) {  return new Person(name);  } } 
            <beans >  <bean name="person" class="com.pengshiyu.factory.PersonFactory" factory-method="newInstance">  <constructor-arg name="name" value="Tom" />  </bean>  </beans> 

            (2)動(dòng)態(tài)工廠

            package com.pengshiyu.factory;  import com.pengshiyu.bean.Person;  public class PersonFactory {  public Person newInstance(String name) {  return new Person(name);  } } 
            <beans>   <bean id="factory" class="com.pengshiyu.factory.PersonFactory" />   <bean name="person" factory-bean="factory" factory-method="newInstance">  <constructor-arg name="name" value="Tom"/>  </bean>  </beans> 

            注意靜態(tài)工廠static

            四、Spring 配置文件

            id 是 bean 的唯一標(biāo)識(shí)符,如果沒有配置 id,name 默認(rèn)為標(biāo)識(shí)符

            如果配置了 id,又配置了 name,則 name 是別名

            name 可以設(shè)置多個(gè)別名分隔符可以是空格、逗號(hào)、分號(hào)

            class 是 bean 的全限定名=包名+類名

            如果不配置 id 和 name,那么可以可以使用如下方式獲取對(duì)象

            applicationContext.getBean(class)

            配置如下

            <beans >  <bean id="person1" name="person user" class="com.pengshiyu.bean.Person" /> </beans>

            獲取方式

            Person person = (Person) context.getBean("person1");  // 或者 Person person = (Person) context.getBean("user");  // 或者 Person person = (Person) context.getBean(Person.class);

            導(dǎo)入文件

            <beans>  <import resource="person.xml"/> </beans>

            五、Spring 依賴注入 DI

            dependency injection

            依賴:指 bean 對(duì)象創(chuàng)建依賴于容器,bean 對(duì)象的依賴資源

            注入:指 bean 對(duì)象依賴的資源由容器來設(shè)置和裝配

            spring 注入

            測(cè)試

            package com.spring.test;   import com.pengshiyu.bean.Person; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext;  public class Demo {  public static void main(String[] args) {  ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");  Person person = (Person) context.getBean("person");  person.sayHello();   } } 
            1. 構(gòu)造器注入
            package com.pengshiyu.bean;  public class Person {   private String name;   public Person(String name) {  this.name = name;  }   public void sayHello() {  System.out.println("hello " + this.name);  } } 
            <beans>  <bean name="person" class="com.pengshiyu.bean.Person">  <constructor-arg name="name" value="Tom"/>  </bean> </beans>
            1. setter 注入

            (1)常量注入

            package com.pengshiyu.bean;  public class Person {   private String name;   public void setName(String name) {  this.name = name;  }   public void sayHello() {  System.out.println("hello " + this.name);  } } 
            <beans >  <bean name="person" class="com.pengshiyu.bean.Person">  <property name="name" value="Tom"/>  </bean> </beans> 

            (2)bean 注入

            package com.pengshiyu.bean;  public class Address {  private String address;   public void setAddress(String address) {  this.address = address;  }   public String getAddress() {  return address;  } } 
            package com.pengshiyu.bean;  public class Person {   private String name;  private Address address;   public void setAddress(Address address) {  this.address = address;  }   public void setName(String name) {  this.name = name;  }   public void sayHello() {  System.out.println("hello " + this.name + this.address.getAddress());  } } 
            <beans >   <bean id="address" class="com.pengshiyu.bean.Address">  <property name="address" value="北京"/>  </bean>   <bean name="person" class="com.pengshiyu.bean.Person">  <property name="name" value="Tom"/>  <property name="address" ref="address"/>  </bean>  </beans> 

            (3)數(shù)組注入

            package com.pengshiyu.bean;  public class Book {  private  String name;   public Book(String name){  this.name = name;  }   @Override  public String toString() {  return "《" + this.name + "》";  } } 
            package com.pengshiyu.bean;  import java.util.Arrays;  public class Person {   private Book[] books;   public void setBooks(Book[] books) {  this.books = books;  }   @Override  public String toString() {  return "Person{" +  "books=" + Arrays.toString(books) +  '}';  } } 
            <beans >  <bean name="person" class="com.pengshiyu.bean.Person">  <property name="books">  <array>  <value>水滸傳</value>  <value>紅樓夢(mèng)</value>  <value>三國演義</value>  <value>西游記</value>  </array>  </property>  </bean> </beans>

            (4)List 注入

            package com.pengshiyu.bean;  import java.util.Arrays; import java.util.List;  public class Person {   private List<String>[] books;   public void setBooks(List<String>[] books) {  this.books = books;  }   @Override  public String toString() {  return "Person{" +  "books=" + Arrays.toString(books) +  '}';  } } 
            <beans>  <bean name="person" class="com.pengshiyu.bean.Person">  <property name="books">  <list>  <value>水滸傳</value>  <value>紅樓夢(mèng)</value>  <value>三國演義</value>  <value>西游記</value>  </list>  </property>  </bean> </beans>

            (5)Map 注入

            package com.pengshiyu.bean;  import java.util.Map;  public class Person {   private Map<String, String> cards;   public void setCards(Map<String, String> cards) {  this.cards = cards;  }   @Override  public String toString() {  return cards.toString();  } } 
            <beans>  <bean name="person" class="com.pengshiyu.bean.Person">  <property name="cards">  <map>  <entry key="中國銀行" value="123456"></entry>  <entry key="建設(shè)銀行" value="123456"></entry>  </map>  </property>  </bean> </beans>

            (6)Set 注入

            package com.pengshiyu.bean;  import java.util.Set;  public class Person {   private Set<String> games;   public void setGames(Set<String> games) {  this.games = games;  }   @Override  public String toString() {  return games.toString();  } } 
            <beans>  <bean name="person" class="com.pengshiyu.bean.Person">  <property name="games">  <set>  <value>英雄聯(lián)盟</value>  <value>王者榮耀</value>  </set>  </property>  </bean> </beans> 

            (7)null 注入

            package com.pengshiyu.bean;  public class Person {   public void setWife(String wife) {  this.wife = wife;  }   private String wife;   @Override  public String toString() {  return wife;  } } 
            <beans>  <bean name="person" class="com.pengshiyu.bean.Person">  <property name="wife"><null/></property>  </bean> </beans>

            (8) Properties 注入

            package com.pengshiyu.bean;  import java.util.Properties;  public class Person {  private Properties props;   public void setProps(Properties props) {  this.props = props;  }   @Override  public String toString() {  return this.props.toString();  } } 
             <beans >  <bean name="person" class="com.pengshiyu.bean.Person">  <property name="props">  <props>  <prop key="name">Tom</prop>  <prop key="sex">Man</prop>  </props>  </property>  </bean> </beans> 

            (9) p 命名空間注入

            需要有對(duì)應(yīng)的 set 方法

            package com.pengshiyu.bean;  public class Person {  private String name;  private int age;   public void setName(String name) {  this.name = name;  }   public void setAge(int age) {  this.age = age;  }   @Override  public String toString() {  return "Person{" +  "name='" + name + '\'' +  ", age=" + age +  '}';  } } 

            頭文件需要引入

            xmlns:p="http://www.springframework.org/schema/p"
            <?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"  xsi:schemaLocation="http://www.springframework.org/schema/beans  http://www.springframework.org/schema/beans/spring-beans.xsd">   <bean name="person" class="com.pengshiyu.bean.Person"  p:name="Tom" p:age="23"/> </beans> 

            (10)c 命名空間注入

            要求有對(duì)應(yīng)的構(gòu)造方法

            package com.pengshiyu.bean;  public class Person {  private String name;  private int age;   public Person(String name, int age) {  this.name = name;  this.age = age;  }   @Override  public String toString() {  return "Person{" +  "name='" + name + '\'' +  ", age=" + age +  '}';  } } 

            頭文件需要引入

            xmlns:c="http://www.springframework.org/schema/c"
            <?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:c="http://www.springframework.org/schema/c"  xsi:schemaLocation="http://www.springframework.org/schema/beans  http://www.springframework.org/schema/beans/spring-beans.xsd">   <bean name="person" class="com.pengshiyu.bean.Person"  c:name="Tom" c:age="23"/> </beans> 

            六、bean 的作用域

            spring

            橋梁 輕量級(jí) 易學(xué) ioc di app 事務(wù) 整合框架

            scope:

            1. singleton 單例 整個(gè)容器只有一個(gè)對(duì)象實(shí)例(默認(rèn))
            2. prototype 原型 每次獲取 Bean 都產(chǎn)生一個(gè)新對(duì)象
            3. request 每次請(qǐng)求時(shí)創(chuàng)建一個(gè)新的對(duì)象
            4. session 會(huì)話范圍內(nèi)有一個(gè)對(duì)象
            5. global session 只在 portlet 下有用,表示 applicatio
            6. application 在應(yīng)用范圍中有一個(gè)對(duì)象


            Bean 自動(dòng)裝配

            autowire

            1. byName
            2. byType
            3. constructor

            不推薦使用自動(dòng)裝配