• Welcome to the world's largest Chinese hacker forum

    Welcome to the world's largest Chinese hacker forum, our forum registration is open! You can now register for technical communication with us, this is a free and open to the world of the BBS, we founded the purpose for the study of network security, please don't release business of black/grey, or on the BBS posts, to seek help hacker if violations, we will permanently frozen your IP and account, thank you for your cooperation. Hacker attack and defense cracking or network Security

    business please click here: Creation Security  From CNHACKTEAM

Recommended Posts

1、IOC本质

反转IoC(Inversion if Control)是一种设计思想,DI (dependency injection)是一种实现IoC的方法。

在没有IoC的程序中,我们使用面向对象的编程,对象的创建和对象之间的依赖完全硬编码在程序中。对象的创建由程序本身控制,控制反转后对象的创建转移给第三方。我个人认为控制反转是指获取依赖对象的方式反转。

当Bean由XML配置时,Bean的定义信息与实现是分离的,但是注释可以将两者结合起来。Bean的定义信息以注释的形式直接定义在实现类中,从而达到零配置的目的。

控制反转是一种通过描述(XML或注释)和通过第三方产生或获得特定对象的方法。在Spring中,IoC容器实现了控件反转,其实现方式是依赖注入。

2、HelloSpring

所谓IoC,就是由Spring来创建、管理和组装对象!

仅在xml配置文件中修改。

3、IOC创建对象的方式

1.默认情况下,使用无参数构造创建对象!

2.假设我们想使用参数构造创建一个对象。

1.下标赋值

!-第一种,下标赋值!-

bean id=' user ' class=' com . usect . POJO . user '

Constructor-arg index='0' value='疯神说Java'/

/bean

2.类型

!-第二种方式,按类型创建,不推荐!-

bean id=' user ' class=' com . usect . POJO . user '

constructor-arg type=' Java . lang . string ' value=' Qingjiang '/

/bean

3.参数名称

!-第三,直接用参数名设置-

bean id=' user ' class=' com . usect . POJO . user '

构造函数-argname=' name ' value=' Qingjiang '/

/bean

总结:加载配置文件时,容器中管理的对象已经初始化!

4、Spring配置

4.1、别名

!-alias,如果添加了别名,我们也可以使用别名来获取这个对象-

别名='用户'别名='用户新'/

4.2、Bean的配置

xml:

!-

id:bean的唯一标识符,相当于我们学习的对象名。

Class:bean对象的完全限定名:包名类型

Name:也是别名,Name可以同时取多个别名。

-

bean id='userT' class=

"com.usect.pojo.UserT" name="user2 u2,u3;u4">
   <property name="name" value="西部开源"/>
</bean>

 

4.3、import

这个import,一般用于团队开发使用,他可以将多个配置文件,导入合并一个

假设,项目中有多个人开发,这三个人复制不同的类开发,不同的类需要注册在不同的bean中,我们可以利用import将所有人的beans.xml合并为一个总的!

张三

李四

王五

applicationContext.xml

<import resource="beans.xml"/>
<import resource="beans2.xml"/>
<import resource="beans3.xml"/>

使用的时候,直接使用总的配置就可以了。

5、依赖注入

5.1、构造器注入

前面已经说过了

5.2、Set方式注入(重点)

依赖注入:Set注入!

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

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

 

【环境搭建】

1.复杂类型

public class Address {
   private String address;

   public String getAddress() {
       return address;
  }

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

2.真实测试对象

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 String wife;
   private Properties info;
  }

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
       https://www.springframework.org/schema/beans/spring-beans.xsd">

   <bean id="student" class="com.usect.pojo.Student">
       <!--第一种,普通值注入,value-->
       <property name="name"  value="秦疆"/>   </bean>

</beans>

4.测试类

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.getAddress());
  }
}

完善注入信息

<?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
       https://www.springframework.org/schema/beans/spring-beans.xsd">

   <bean id="address" class="com.usect.pojo.Address">
       <property name="address" value="西安"/>
   </bean>

   <bean id="student" class="com.usect.pojo.Student">
       <!--第一种,普通值注入,value-->
       <property name="name"  value="秦疆"/>

       <!--第二种,bean注入,ref-->
       <property name="address" ref="address"/>
       <!--数组-->
       <property name="books">
           <array>
               <value>红楼梦</value>
               <value>西游记</value>
               <value>水浒传</value>
               <value>三国演义</value>
           </array>
       </property>

       <!--List-->
       <property name="hobbys">
           <list>
               <value>听歌</value>
               <value>敲代码</value>
               <value>看电影</value>
           </list>
       </property>

       <!--Map-->
       <property name="card">
           <map>
               <entry key="身份证" value="111111222222223333"/>
               <entry key="银行卡" value="1113131323131323233"/>
           </map>
       </property>

       <!--Set-->
       <property name="games">
           <set>
               <value>LOL</value>
               <value>COC</value>
               <value>BOB</value>
           </set>
       </property>

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

       <!--Properties-->
       <property name="info">
           <props>
               <prop key="driver">20190525</prop>
               <prop key="url">男</prop>
               <prop key="username">小明</prop>
               <prop key="password">123456</prop>
           </props>
       </property>
   </bean>

</beans>

5.3拓展方式注入

我们可以使用p命令空间和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:p="http://www.springframework.org/schema/p"
      xmlns:c="http://www.springframework.org/schema/c"
      xsi:schemaLocation="http://www.springframework.org/schema/beans
       https://www.springframework.org/schema/beans/spring-beans.xsd">

   <!--p命名空间注入,可以直接注入属性的值:property-->
   <bean id="user" class="com.usect.pojo.User" p:name="秦疆" p:age="18"/>

   <!--c命名空间注入,通过构造器注入:constructor-args-->
   <bean id="user2" class="com.usect.pojo.User" c:age="18" c:name="狂神"/>

</beans>

测试:

    @Test
   public void Test2(){
       ApplicationContext context = new ClassPathXmlApplicationContext("userbeans.xml");
       User user = (User) context.getBean("user2",User.class);
       System.out.println(user);
  }

 

注意点:p命名和c命名空间不能直接使用,需要导入xml约束!

   xmlns:p="http://www.springframework.org/schema/p"
  xmlns:c="http://www.springframework.org/schema/c"

5.4、bean的作用域

1、单例模式(Spring默认机制)

<bean id="user2" class="com.usect.pojo.User" c:age="18" c:name="狂神" scope="singleton"/>

2、原型模式:每次从容器中get的时候,都会产生一个新对象!

<bean id="user2" class="com.usect.pojo.User" c:age="18" c:name="狂神" scope="prototype"/>

3、其余的request、session、application、这些个只能在web开发中使用到!

 

bean作用域的图示:

dvyzuylnog02928.png

 

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now