Spring

Posted 第厘

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring相关的知识,希望对你有一定的参考价值。

2.4 IOC创建对象方式

 

通过无参构造方法来创建

1、User.java

public class User {   
   private String name;  
   public User() {      
       System.out.println("user无参构造方法");  
  }  
   public void setName(String name) {  
       this.name = name;  
  }  
   public void show(){    
       System.out.println("name="+ name );
  }
}

2、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 id="user" class="com.kuang.pojo.User">    
       <property name="name" value="kuangshen"/>
   </bean>
</beans>

3、测试类

@Testpublic 
void test(){  
   ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");  
   //在执行getBean的时候, user已经创建好了 , 通过无参构造  
   User user = (User) context.getBean("user");  
   //调用对象的方法
   user.show();}

结果可以发现,在调用show方法之前,User对象已经通过无参构造初始化了!

 

通过有参构造方法来创建

1、UserT . java

public class UserT {  
   private String name;
   public UserT(String name) {
       this.name = name;
  }  
   public void setName(String name) {
       this.name = name;
  }  
   public void show(){    
       System.out.println("name="+ name );
  }
}

2、beans.xml 有三种方式编写

<!-- 第一种根据index参数下标设置 -->
<bean id="userT" class="com.kuang.pojo.UserT">
   <!-- index指构造方法 , 下标从0开始 -->  
   <constructor-arg index="0" value="kuangshen2"/>
</bean>

<!-- 第二种根据参数名字设置 -->
<bean id="userT" class="com.kuang.pojo.UserT">
   <!-- name指参数名 -->  
   <constructor-arg name="name" value="kuangshen2"/>
</bean>

<!-- 第三种根据参数类型设置 -->
<bean id="userT" class="com.kuang.pojo.UserT">
   <constructor-arg type="java.lang.String" value="kuangshen2"/>
</bean>

3、测试

@Testpublic void testT(){
   ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");  
   UserT user = (UserT) context.getBean("userT");  
   user.show();
}

结论:在配置文件加载的时候。其中管理的对象都已经初始化了

3、Spring配置

3.1 别名

alias 设置别名 , 为bean设置别名 , 可以设置多个别名()

<!--设置别名:在获取Bean的时候可以使用别名获取-->
<alias name="userT" alias="userNew"/>

3.2 Bean的配置

<!--bean就是java对象,由Spring创建和管理-->
<!--  
id 是bean的标识符,要唯一,如果没有配置id,name就是默认标识符  
如果配置id,又配置了name,那么name是别名
 name可以设置多个别名,可以用逗号,分号,空格隔开
 如果不配置id和name,可以根据applicationContext.getBean(.class)获取对象;
class是bean的全限定名=包名+类名-->

<bean id="hello" name="hello2 h2,h3;h4" class="com.kuang.pojo.Hello">
   <property name="name" value="Spring"/>
</bean>

3.3 import

团队的合作通过import来实现 .

<import resource="{path}/beans.xml"/>

 

4、依赖注入

4.1 构造器注入

前面已经说过了

4.2 Set方式注入 【重点】

  • 依赖注入:Set注入

    • 依赖:bean对象的创建依赖于容器

    • 注入:bean对象中的所有属性,由容器来注入

模拟环境搭建

1.两个实体类

package com.alice.pojo;

import java.util.*;

public class Student {
   private String name;
   private Address address;
   private  String[] books;
   private List<String>hobbys;
   private Map<String,String> card;
   private Set<String> games;
   private Properties info;
   private String wife;

   public String getName() {
       return name;
  }

   public void setName(String name) {
       this.name = name;
  }

   public Address getAddress() {
       return address;
  }

   public void setAddress(Address address) {
       this.address = address;
  }

   public String[] getBooks() {
       return books;
  }

   public void setBooks(String[] books) {
       this.books = books;
  }

   public List<String> getHobbys() {
       return hobbys;
  }

   public void setHobbys(List<String> hobbys) {
       this.hobbys = hobbys;
  }

   public Map<String, String> getCard() {
       return card;
  }

   public void setCard(Map<String, String> card) {
       this.card = card;
  }

   public Set<String> getGames() {
       return games;
  }

   public void setGames(Set<String> games) {
       this.games = games;
  }

   public Properties getInfo() {
       return info;
  }

   public void setInfo(Properties info) {
       this.info = info;
  }

   public String getWife() {
       return wife;
  }

   public void setWife(String wife) {
       this.wife = wife;
  }
}
package com.alice.pojo;

public class Address {
   private String address;

   public String getAddress() {
       return address;
  }

   public void setAddress(String address) {
       this.address = address;
  }
}

 

2.配置 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">
   <!--使用Spring来创建对象,在Spring中这些都称为Bean
//bean就是java对象 , 由Spring创建和管理
  类型 变量名 = new 类型();// Hello hello = new hello();
id -> 变量名
  class -> new 的对象
property -> 给对象中的属性(//成员变量)设置一个值
-->
   <bean id="address" class="com.alice.pojo.Address">
       <property name="address" value="111"/>
   </bean>
   
   <bean id="student" class="com.alice.pojo.Student">
       <!--普通注入-->
       <property name="name" value="alice"/>

       <!--Bean注入-->
       <property name="address" ref="address"/>

       <!--数组注入-->
       <property name="books">
           <array>
               <value>java</value>
               <value>javaweb</value>
               <value>Spring</value>
           </array>
       </property>

       <!--List-->
       <property name="hobbys">
           <list>
               <value>1</value>
               <value>2</value>
               <value>3</value>
           </list>
       </property>

       <!--Map-->
       <property name="card">
           <map>
               <entry key="id" value="123456"/>
               <entry key="pwd" value="123456"/>
           </map>
       </property>

       <!--Set-->
       <property name="games">
           <set>
               <value>CF</value>
               <value>LOL</value>
               <value>GTA</value>
           </set>
       </property>

       <!--null-->
       <property name="wife">
           <!--
-->
           <null/>
       </property>

       <!--Properties-->
       <property name="info">
           <props>
               <prop key="学号">20190526</prop>
               <prop key="username">root</prop>
               <prop key="password">root</prop>
           </props>
       </property>
   </bean>
</beans>

3.测试

import com.alice.pojo.Student;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import java.applet.AppletContext;

public class MyTest {
   public static void main(String[] args) {
       ApplicationContext context=new ClassPathXmlApplicationContext("beans.xml");
       Student student=(Student) context.getBean("student");
       System.out.println(student.getBooks());
       for (String book : student.getBooks()) {
           System.out.println(book);
      }
  }
}

以上是关于Spring的主要内容,如果未能解决你的问题,请参考以下文章

Spring boot:thymeleaf 没有正确渲染片段

What's the difference between @Component, @Repository & @Service annotations in Spring?(代码片段

spring练习,在Eclipse搭建的Spring开发环境中,使用set注入方式,实现对象的依赖关系,通过ClassPathXmlApplicationContext实体类获取Bean对象(代码片段

Spring Rest 文档。片段生成时 UTF-8 中间字节无效 [重复]

解决spring-boot启动中碰到的问题:Cannot determine embedded database driver class for database type NONE(转)(代码片段

一张图帮你记忆,Spring Boot 应用在启动阶段执行代码的几种方式