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
    本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    python json 和 pickle的补充 hashlib configparser logging
    go 流程语句 if goto for swich
    go array slice map make new操作
    go 基础
    块级元素 行内元素 空元素
    咽炎就医用药(慢性肥厚性咽炎)
    春季感冒是风寒还是风热(转的文章)
    秋季感冒 咳嗽 怎么选药
    解决IE浏览器“无法显示此网页”的问题
    常用的 css 样式 记录
  • 原文地址:https://www.cnblogs.com/wangj1130/p/4899392.html
Copyright © 2011-2022 走看看