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

spring框架1

程序员文章站 2022-03-09 07:57:48
...

 

spring优点

  • 低侵入设计,代码的污染极地
  • 独立于各种应用服务器,基于Spring框架的应用,可以真正实现Write  Once ,Run Anywhere的承若
  • Spring的IoC容器降低了业务对象替换的复杂性,提高了组件之间的解耦
  • Spring的AOP支持将一些通用的任务和安全、事务、日志等进行集中式管理,从而提供了更好的复用
  • Spring的ORM和DAO提供了与第三方持久层框架的良好整合,并简化了底层的数据库访问。
  • Spring的高度开放性,并不强制应用完全依赖于Spring,开发者可*选用Spring框架的部分或全部

Spring框架的组成结构图如下所示

spring框架1

Spring有两个核心模块

1.控制反转(Inversion  Of  Control)(IOC)容器  (依赖注入dependency injection(DI))

2.面向切面编程AOP(Aspect  Oriented  Programming)

IOC控制反转

  • 控制反转它不是什么技术,而是一种设计思想
  • 传统的Java  SE程序设计,我们直接在对象内部通过new进行创建对象,是程序主动去创建对象;而IoC是有专门一个容器来创建这些对象,是程序主动去创建依赖对象;而IoC是专门一个容器来创建这些对象,即由IoC容器来控制对象的创建;
  • IoC控制反转将对象的创建权交给了Spring,我们通过Spring,就不用每次去创建对象,只需要通过Spring容器调用getBean(name属性或id属性)获取对应的对象
//spring.xml文件
<?xml version="1.0" encoding="UTF-8"?>

<--
xmlns:xml  namespace (命名空间)

-->

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

<--
配置bean标签,创建bean对象
1.通过无参数的构造方法创建对象
2.通过静态方法创建对象
3.通过工厂方式创建对象
class:类名(包名+类名)
id:对象的标识,对象的名称
name:对象的名称
单例模式:singleton
多例模式:prototype
-->
        
    <--通过无参构造方法创建对象-->
<--通过无参数的的构造方法创建对象-->
    <bean id="user" class="com.zhiyou.modle.User" scope="prototype"></bean>

<!--
    2.通过静态方法创建对象
        factory-method:静态方法名称
-->
    <bean name="single" class="com.zhiyou.model.SingleTon"
        factory-method="getInstance"></bean>


3.使用实例工厂方法创建对象

  <bean name="factory" class="com.zhiyou.model.Factory" ></bean>
      <bean name="user2" class="com.zhiyou.model.User" 
       factory-bean="factory"  factory-method="getPeople"
       ></bean>


</beans>

 

//单例模式 singleton

package  coom.zhiyou.modle;


public  class  SingleTon{
    
    static SingleTon singleTon;
    //提供私有方法
    private SingleTon(){


}
    //提供一个静态的获取唯一对象的方法
    public static SingleTon getInstance(){
        
        if(singleTon==null){

        singleTon= new SingleTon();
        }
        return singleTon

        }

}
/**
    modle包下的user
*/
    
package com.zhiyou.model;

public class User extends People {
	
	public void running(){
		System.out.println("running...");
	}

}

/**
      modle包下的Factory
*/
public class Factory {

	
	public People getPeople(){
		return new User();
	}
	
}
/**
     modle包下的People
*/
public class People {

}




-----------------------------------------------------------------------


/**
    1.通过springIOC容器创建对象
    2.classPath对应的是src文件夹
    3.基于classpath的路径
     
*/

   
    ClassPathXmlApplicationContext  context = new 
        ClassPathXmlApplicationContext("spring.xml");

    User user =(User)Context.getBean("user");
    user.running();


    SingleTon singleTon = (SingleTon)context.getBean("single");
    System.out.println(singleTon);


    User user2 = context.getBean("user2");
    system.out.println(user2)












依赖注入

1.设值注入

设值注入是指IoC容器通过成员变量的setter方法来注入被依赖对象。这种注入方式简单、直观,因而在Spring的依赖注入里大量使用。

//UserDaoImpl类


package com.zhiyou.dao.impl;

import com.zhiyou.dao.UserDao;

public class UserDaoImpl implements UserDao {

	@Override
	public void addUser(String name) {
		// TODO Auto-generated method stub
		System.out.println("把用户"+name+"添加到数据库中了");		
	}

}



//UserServiceImpl类

package com.zhiyou.service.impl;

import com.zhiyou.dao.UserDao;
import com.zhiyou.dao.impl.UserDaoImpl;
import com.zhiyou.service.UserService;

public class UserServiceImpl implements UserService {

	UserDao userDao;
	String name;
	
	public void setName(String name) {
		this.name = name;
	}
	
	public void setUserDao(UserDao userDao) {
		this.userDao = userDao;
	}
	
	public UserServiceImpl() {
		// TODO Auto-generated constructor stub
	}
	
	public UserServiceImpl(UserDao userDao) {
		// TODO Auto-generated constructor stub
		System.out.println("构造方法");
		this.userDao = userDao;
	}
	
	
	@Override
	public void addUser(String name) {
		// TODO Auto-generated method stub
		userDao.addUser(this.name);
	}

}
<!--属性赋值

property:使用setter方法给属性赋值
        name:属性名称
        ref:属性值(对象的名称)
        value:属性值
        简单类型:(基本数据类型+String)使用value
        其他引用类型使用ref

-->

<bean id="userDaoImpl" class="com.zhiyou.dao.impl.UserDaoImpl"></bean>

<bean id="userService" class="com.zhiyou.service.impl.UserServiceImpl">
    <property name="userDao ref="userDaoImpl"></proterty>
    <property name="name" value="李四"></proterty>
</bean>


<!--
    通过构造方法给属性赋值:
        使用constructor-arg标签
            name:构造方法参数名(属性名)
                ref:对象名称

-->

 <bean id="userService" class="com.zhiyou.service.impl.UserServiceImpl">
		<constructor-arg name="userDao" ref="userDaoImpl"></constructor-arg> 
   </bean>



//集合通过setter方法注入值
 <bean id="proService" class="com.zhiyou.service.impl.PropertyServiceImpl">
   		<property name="list" >
   			<list>
   				<value>abc</value>
   				<value>张三</value>
   			</list>
   		</property>
   		<property name="newList">
   			<list>
   				<value>20</value>
   				<value>hello</value>
   				<ref bean="user"/>
   			</list>
   		</property>
   		<property name="map">
	   		<map>
	   			<entry key="key1" value="aaa"></entry>
	   			<entry key="key2" value-ref="user"></entry>
	   		</map>
   		</property>
   		
   </bean>





        
   <!-- 
   		autowire:自动注入(自动给属性赋值)
   		byName:根据名称匹配进行赋值(在spring配置文件中查找和属性名称一模一样的bean对象)
   		byType: 根据类型匹配进行赋值(在spring配置文件中查找和属性类型一致的bean对象)
   				都是通过setter方法进行赋值
   				
    -->
    
 <!--   <bean id="msgDao2" class="com.zhiyou.dao.orcale.MsgDaoOracleImpl"/>  -->
   <bean id="MsgDao" class="com.zhiyou.dao.impl.MsgDaoImpl"></bean>
   
   <bean id="msgService" class="com.zhiyou.service.impl.MsgServiceImpl" autowire="byType" ></bean




set注入图解

spring框架1

 

constructor注入图解

spring框架1

给数组和list集合赋值

spring框架1

给set集合、map集合、properties集合赋值

spring框架1

自动注入(依赖注入)

所谓自动装配,就是将一个 Bean 注入到其他 Bean 的 Property 中

Spring 支持 4 种自动装配模式(bean的autowire属性),如下:

no —— 默认情况下,不自动装配,通过 ref  attribute手动设定。

byName —— 根据 Property 的 Name 自动装配,如果一个 bean 的 id,和另一个 bean 中的 Property 的 name 相同,则自动装配这个 bean 到 Property 中。

byType —— 根据 Property 的数据类型( Type )自动装配,如果一个 bean 的数据类型,兼容另一个 bean 中 Property 的数据类型,则自动装配。

constructor —— 根据构造函数参数的数据类型,进行 byType 模式的自动装配。

spring框架1

spring框架1

 

 

 

相关标签: spring