欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Spring入门详细教程(二)

程序员文章站 2022-03-24 11:17:00
前言 本篇紧接着spring入门详细教程(一),建议阅读本篇前,先阅读第一篇。链接如下: Spring入门详细教程(一) https://www.cnblogs.com/jichi/p/10165538.html 一、spring注入方式 1、set方法注入 2、构造方法注入 3、p名称空间注入 4 ......

前言

本篇紧接着spring入门详细教程(一),建议阅读本篇前,先阅读第一篇。链接如下:

spring入门详细教程(一) 

一、spring注入方式

1、set方法注入

<bean name="user" class="com.jichi.entity.user" >
  <property name="name" value="小明"></property>
  <property name="age" value="18"></property>
</bean>

2、构造方法注入

<bean name="user" class="com.jichi.entity.user" >
    <constructor-arg name="name" value="小红" ></constructor-arg>
  <constructor-arg name="age" value="50"></constructor-arg>
</bean>

3、p名称空间注入

xmlns:p="http://www.springframework.org/schema/p"
<bean name="user" class="com.jichi.entity.user" p:name="小白" p:age="10"></bean>

4、spel表达式注入

    <bean name="user" class="com.jichi.entity.user">
        <property name="name" value="小红"></property>
        <property name="age" value="18"></property>
    </bean>
    <bean name="user1" class="com.jichi.entity.user">
        <property name="name" value="#{user.name}"></property>
        <property name="age" value="#{user.age}"></property>
    </bean>

二、spring复杂类型注入

public class collection {

    public string[] arr;
    
    public list<string> list;
    
    public map<string,object> map;

    public properties props;

    public string[] getarr() {
        return arr;
    }

    public void setarr(string[] arr) {
        this.arr = arr;
    }

    public list<string> getlist() {
        return list;
    }

    public void setlist(list<string> list) {
        this.list = list;
    }

    public map<string, object> getmap() {
        return map;
    }

    public void setmap(map<string, object> map) {
        this.map = map;
    }

    public properties getprops() {
        return props;
    }

    public void setprops(properties props) {
        this.props = props;
    }

    @override
    public string tostring() {
        return "collection [arr=" + arrays.tostring(arr) + ", list=" + list + ", map=" + map + ", props=" + props + "]";
    }
    
} 

1、数组类型注入

        <bean name="collect" class="com.jichi.entity.collection">
            <property name="arr">
                <array>
                    <value>xiaohei</value>
                    <value>xiaobai</value>
                </array>            
            </property>        
        </bean>

2、list类型注入

        <bean name="collect" class="com.jichi.entity.collection">
            <property name="list">
                <list>
                    <value>xiaohei</value>
                    <value>xiaobai</value>
                </list>            
            </property>        
        </bean>

3、map类型注入

        <bean name="collect" class="com.jichi.entity.collection">
            <property name="map">
                <map>
                    <entry key="name" value="xiaohei"></entry>
                    <entry key="age" value="18"></entry>
                </map>            
            </property>
        </bean>

4、properties类型注入

        <bean name="collect" class="com.jichi.entity.collection">
            <property name="props">
                <props>
                    <prop key="name">xiaohei</prop>
                    <prop key="age">18</prop>
                </props>
            </property>
        </bean>

三、配置spring随web项目启动初始化

在web.xml中配置。

 <listener>
      <listener-class>org.springframework.web.context.contextloaderlistener</listener-class>
  </listener>
 <context-param>
      <param-name>contextconfiglocation</param-name>
      <param-value>classpath:applicationcontext.xml</param-value>
  </context-param>

四、spring的分配置文件

方式一:

applicationcontext applicationcontext = new classpathxmlapplicationcontext("applicationcontext1.xml","applicationcontext2.xml")

方式二:

<import resource="applicationcontext.xml"></import>

五、spring注解配置

1、开启注解扫描

<context:component-scan base-package="com.jichi.entity"></context:component-scan>

扫描com.jichi.entity下的所有类中的注解。

2、在类上添加注解

@component
public class user {
}

六、spring常用注解

1、@componet,@controller,@service,@repository四个组件注解,作用在类上。四个注解并无区别,只是为了方便区分。

2、@scope注解,作用在类上。

@scope(scopename="singleton")  //单例模式
public class user {
}
@scope(scopename="prototype")  //多例模式
public class user {
}

3、@value用于注入普通类型值

第一种方式:作用在属性上,通过反射的filed值,破坏了对象的封装性。

@value("xiaohei")
private string name;

第二种方式:通过set方法赋值,不破坏对象的封装性。

    @value("xiaobai")
    public void setname(string name) {
        this.name = name;
    }

4、@autowired,@resource,@qualifier注解 

引用类型的装配方式,详细区别请看之前的博客。

    @autowired
    private car car;
    @resource
    private car car;

5、@postconstruct与@predestroy

    @postconstruct   //创建对象前调用
    public void init(){
        system.out.println("初始");
    }
    @predestroy     //对象销毁前调用
    public void destory(){
        system.out.println("销毁");
    }