有事没事领个红包

Spring基础知识

Spring主要解决对象的创建及对象之间的依赖关系

1 IOC容器,控制反转,主要作用是对象的创建交给该容器

2 依赖注入,解决对象之间的依赖关系

3 AOP,面向切面编程

 

一、IOC容器相关属性,applicationContext.xml配置文件一些属性说明,在3.0之后没有该文件,需要自己去创建。简单例子如下

<?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:context="http://www.springframework.org/schema/context"
    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">
  

    <!-- 所有要创建的对象配置都在此处配置 -->
    <bean id="user" class="com.huitong.entity.User"></bean>

        
</beans>

 

1 scope,可以取值singleton,prototype

singleton是单例模式,在IOC容器创建之前就创建了对象。

prototype多例模式,用到对象才创建。在IOC容器创建之后创建。

 

2 init-method="init_user" destroy-method="destroy_user",这两个属性是在对象创建之后和销毁之前执行初始化、销毁动作。

 

二、springIOC容器,是spring核心内容

主要作用是创建对象、处理对象的依赖关系。一个对象一个bean相对应,如果不创建对象,就不用指定bean属性。class指定使用哪个类。

1 constructor-arg用来指定带参构造函数参数值。

2 ref用来指定引用bean值,不用value属性了。

3 使用工厂类来创建对象有两种方式,1)使用工厂对象创建对象 2)使用静态方法创建对象

关键属性是

class=""//指定哪个工厂类,在静态方法中使用

factory-bean=""//使用工厂对象创建对象,

factory-method=""//指定使用那个方法创建对象

 

三、类属性赋值在spring中常用方法

 

1 使用带参数构造函数,配置如下

    <bean id="user2" class="com.huitong.entity.User" factory-bean="" factory-method="">
            <constructor-arg index="0" value="1" type="int"></constructor-arg>
            <constructor-arg index="1" value="allen" ></constructor-arg>
        </bean>

简单测试

public void fun2(){
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("com/baidu/entity/applicationContext.xml");
        User user2 = (User) context.getBean("user2");
        System.out.println(user2);
    }

在MVC模式中经常使用到dao/service/action

现在以user对象做一个简单例子,userDao,userService,userAction类如下

public class UserDao {
    
    public UserDao() {
        // TODO Auto-generated constructor stub
    }
    
    public void saveUser(){
        System.out.println("保存user");
    }

}

public class UserService {
    private UserDao userDao;
    
    public UserService() {
        // TODO Auto-generated constructor stub
    }

    public UserDao getUserDao() {
        return userDao;
    }

    public void setUserDao(UserDao userDao) {
        this.userDao = userDao;
    }
    
    public void saveUser(){
        userDao.saveUser();
    }
    

}

public class UserAction {
    private UserService userService;
    
    public UserAction() {
    }

    public UserService getUserService() {
        return userService;
    }

    public void setUserService(UserService userService) {
        this.userService = userService;
    }
    
    public void save(){
        userService.saveUser();
    }
}
View Code

 

2 set方法注入,属性关键字property,配置如下

    <bean id="userDao" class="com.baidu.entity.UserDao"></bean> <bean id="userService" class="com.baidu.entity.UserService"> <property name="userDao" ref="userDao"></property> </bean> <bean id="userAction" class="com.baidu.entity.UserAction"> <property name="userService" ref="userService"></property> </bean>

类对象如果有属性,需要有set方法,才可以使用该方法注入属性。

简单测试

public void fun3(){
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("com/baidu/entity/bean.xml");
        UserAction userAction = (UserAction) context.getBean("userAction");
        userAction.save();
        
    }

 

3 p名称空间,需要在配置文件中引入p schemal,xmlns:p="http://www.springframework.org/schema/p"。配置如下

     <bean id="userDao" class="com.huitong.entity.UserDao"></bean>
        <bean id="userService" class="com.huitong.entity.UserService" p:userDao-ref="userDao"></bean>
        
        <bean id="userAction" class="com.huitong.entity.UserAction" p:userService-ref="userService"></bean>
        

其中使用...-ref是说明引用的是之前的定义的对象,如果直接类似是p:userDao=""说明使用的是值。

 

posted @ 2017-04-29 14:11  crazyCodeLove  阅读(217)  评论(0编辑  收藏  举报