zoukankan      html  css  js  c++  java
  • Spring学习笔记(一)

    Spring学习笔记(一)

    Spring核心思想:

    IOC:  Inversion Of Control (控制反转) / DI: Dependency Injection (依赖注入)

    AOP: Aspect Oriented Programming (面向切面编程)


    IOC

    1. 简单的应用

    Model

    package com.wangj.spring.model;
    
    public class User {
        private String username;
        private String password;
    
        public String getUsername() {
            return username;
        }
    
        public void setUsername(String username) {
            this.username = username;
        }
    
        public String getPassword() {
            return password;
        }
    
        public void setPassword(String password) {
            this.password = password;
        }
    }
    View Code

    Dao

    package com.wangj.spring.dao;
    
    import com.wangj.spring.model.User;
    
    public interface UserDao {
        void save(User user);
    }
    View Code

    DaoImpl

    package com.wangj.spring.dao.impl;
    
    import com.wangj.spring.dao.UserDao;
    import com.wangj.spring.model.User;
    
    public class UserDaoImpl implements UserDao {
        @Override
        public void save(User user) {
            System.out.println(String.format("user(%s) saved!", user.getUsername()));
        }
    }
    View Code

    Service

    package com.wangj.spring.service;
    
    import com.wangj.spring.dao.UserDao;
    import com.wangj.spring.model.User;
    
    public class UserService {
        private UserDao userDao;
    
        public void add(User user) {
            userDao.save(user);
        }
    
        public UserDao getUserDao() {
            return userDao;
        }
    
        public void setUserDao(UserDao userDao) {
            this.userDao = userDao;
        }
    }
    View Code

    jar

    applicationContext.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" xmlns:aop="http://www.springframework.org/schema/aop"
        xmlns:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context"
        xmlns:tx="http://www.springframework.org/schema/tx"
        xsi:schemaLocation="
                http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
                http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
                http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd
                http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd">
        
        <bean id="userDao" class="com.wangj.spring.dao.impl.UserDaoImpl">
        </bean>
        
        <bean id="userService" class="com.wangj.spring.service.UserService">
            <property name="userDao" ref="userDao"></property>
        </bean>
    </beans>
    View Code

    test

    package com.wangj.spring;
    
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.FileSystemXmlApplicationContext;
    
    import com.wangj.spring.model.User;
    import com.wangj.spring.service.UserService;
    
    public class SpringDemo {
        public static void main(String[] args) {
            ApplicationContext applicationContext = new FileSystemXmlApplicationContext("config/applicationContext.xml");
            
            UserService service = (UserService) applicationContext.getBean("userService");
            
            User user = new User();
            user.setUsername("wangj");
            user.setPassword("wangj1130");
            service.add(user);
        }
    }
    View Code

    2. 具体用法(XML配置)

    • bean注入方法
    1. set方法注入
    
    <bean id="userService" class="com.wangj.spring.service.UserService">
        <property name="userDao" ref="userDao"></property>
    </bean>
    
    2. 构造方法注入
    <bean id="userService" class="com.wangj.spring.service.UserService">
    <constructor-arg>
        <ref bean="userDao"/>
        <!-- <bean class="com.wangj.test.spring.dao.impl.UserDaoImpl"/> --> <!-- 重新new对象 -->
    </constructor-arg>
    </bean>
    
    当构造方法里含有多个参数时:
    1)根据类型
    <bean id="exampleBean" class="examples.ExampleBean">
        <constructor-arg type="int" value="7500000"/>
        <constructor-arg type="java.lang.String" value="42"/>
    </bean>
    2)根据顺序
    <bean id="exampleBean" class="examples.ExampleBean">
        <constructor-arg index="0" value="7500000"/>
        <constructor-arg index="1" value="42"/>
    </bean>
    • bean scope属性:

      scope="singleton" //(默认)每次使用同一个对象

         ="prototype" //每次都new一个新的(Struts Action)

         =request、session、global session(不重要)

    • 集合注入
    <bean name="userDAO" class="com.wangj.dao.impl.UserDAOImpl">
          <property name="sets">
              <set>
                  <value>1</value>
                  <value>2</value>
              </set>
          </property>
          <property name="lists">
              <list>
                  <value>1</value>
                  <value>2</value>
                  <value>3</value>
              </list>
          </property>
          <property name="maps">
              <map>
                  <entry key="1" value="1"></entry>
                  <entry key="2" value="2"></entry>
                  <entry key="3" value="3"></entry>
                  <entry key="4" value="4"></entry>
              </map>
          </property>
    </bean>
    • autowire 自动装配

      autowire="byName" // 根据名称自动装配,该名称为setXxx()方法中xxx(set后的字符串首字母小写),与变量名无关

          ="byType" // 根据类型自动装配

          ="default" // 跟<beans 节点中 default-autowire属性一致,如果<beans节点中未配置default-autowire属性,则报异常

    • bean生命周期

      lazy-init="true" // 什么时用到什么时候初始化(sping初始化默认将所有bean加载到内存)

      init-method="init" // 容器初始化时调用

      destroy-method="destroy" // 容器销毁时调用

      (init-method、destroy-method 一般不和prototype一起用)

      

    作者:踮起脚尖眺望
    出处:http://www.cnblogs.com/wangj1130
    本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    UVA 10618 Tango Tango Insurrection
    UVA 10118 Free Candies
    HDU 1024 Max Sum Plus Plus
    POJ 1984 Navigation Nightmare
    CODEVS 3546 矩阵链乘法
    UVA 1625 Color Length
    UVA 1347 Tour
    UVA 437 The Tower of Babylon
    UVA 1622 Robot
    UVA127-"Accordian" Patience(模拟)
  • 原文地址:https://www.cnblogs.com/wangj1130/p/4899392.html
Copyright © 2011-2022 走看看