spring

Spring:

面向接口编程,表示层调用控制层,控制层调用业务层(service),业务层(service)调用数据访问层(dao)

Ioc:控制反转

对象由原来程序本身创建,变为了程序接收对象。

程序员主要集中精力于业务实现。

实现了service和dao的解耦工作。service层和dao层实现了分离。没有直接依赖关系。

如果dao层的需求发生改变,应用程序本身不用改变。

HelloSpring:

导入包:

spring配置文件名称可以自定义。

hello对象由spring容器进行创建。

hello的属性由spring容器进行设置的。

这个过程叫控制反转。

控制的内容是什么:指谁来控制对象的创建。传统的应用程序对象的创建是由程序本身控制的,使用spring后,是由spring来创建。

Hello.java 

package bean;


public class Hello {


private String name;
public void setName(String name){
this.name = name;
}
public void show(){
System.out.println("hello "+name);
}
}


<?xml version="1.0" encoding="UTF-8"?>
<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-2.5.xsd">

beans.xml

<!-- bean是java对象由spring容器来创建和管理 -->
<bean name="hello" class="bean.Hello">
<property name="name" value="zhang" />
</bean>
</beans>

Test.java

package test;


import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;


import bean.Hello;


public class Test {


public static void main(String[] args) {
//解析beans.xml文件生成管理相应的bean对象。
ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
Hello hello = (Hello)context.getBean("hello");
hello.show();

}
}

import service.UserService;
import dao.UserDao;


public class UserServiceImpl implements UserService {


//实现了service和dao的解耦
private UserDao userDao = null;




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




@Override
public void getUser() {

userDao.getUser();
}


}


<?xml version="1.0" encoding="UTF-8"?>
<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-2.5.xsd">


<bean id="mySqlDao" class = "impl.MySqlDaoImpl"/>
<bean id="oracleDao" class = "impl.OracleDaoImpl"/>
<bean id="userDaos" class = "impl.UserDaoImpl"/>
<bean id="service" class = "impl.UserServiceImpl">
<property name="userDao" ref="mySqlDao"></property>//ref 是引用对象,对象是由spring来创建的
</bean>
</beans>

使用ioc创建对象 有3种方式:
1.通过无参构造方法来创建对象

ublic class User {


public User() {
System.out.println("无参构造方法");
}
private String name;
public void setName(String name) {
this.name = name;
}

public void show(){
System.out.println(name);
}
}

<bean id="user" class="vo.User">
<property name="name" value="张三"></property>
</bean>

2.有参的构造方法创建对象:

public class User {
private String name;
public User(String name){

super();
this.name = name;
}


public void show(){
System.out.println(name);
}
}

beans.xml3种配置方法:

1.通过index下标:index="0"

2.根据参数名来设置

3.根据参数类型来设置:

1.<bean id="user1" class="vo.User">
<constructor-arg index="0" value="lisi" />
</bean>

2.<bean id="user1" class="vo.User">
<constructor-arg name="name" value="lisi" />//指定参数名
</bean>

3.<bean id="user1" class="vo.User">

<constructor-arg type="java.lang.String" value="lisi" />//指定参数类型
</bean>

3.通过工厂方法来创建对象

1.静态工厂

package factory;
import vo.User;
public class Factory {
public static User newInstance(String name){
return new User(name);
}
}

<bean id="user1" class="factory.Factory" factory-method="newInstance">
<constructor-arg index="0" value="wangwu"></constructor-arg>
</bean>

2.动态工厂

package factory;
import vo.User;
public class DynamicFactory {
public  User newInstance(String name){
return new User(name);
}
}


<bean id="userFactory" class="factory.DynamicFactory"></bean>
<bean id="user1" factory-bean="userFactory" factory-method="newInstance">
<constructor-arg index="0" value="wangwu"></constructor-arg>
</bean>

spring的配置详解:

1.alias :为bean设置别名
<!-- 设置别名 -->
<alias name="user1" alias="u2"/>

<!-- 设置别名 -->
<bean id="user1" name="u1,u3 u4 "factory-bean="userFactory" factory-method="newInstance">
<constructor-arg index="0" value="wangwu"></constructor-arg>
</bean>
2.bean的配置:<!-- id:是bean的标识符,是唯一的 如果没有配置id,name默认为是标识符-;如果配置了id又配置了name,那么name是别名,name可以设置多个别名,而且分隔符可以是分隔符,逗号,分号;如果不配置id,name,那么可以根据application.getContext(Class)获取对象->
context.getBean(Hello.class);
class是bean的全限定名:包名+类名
<bean id="userFactory" class="factory.DynamicFactory"></bean>
3.<import resource="entity.xml"/>引用其他spring配置(团队协作开发,引用他人的xml文件时)

<bean id="userFactory" class="factory.DynamicFactory"></bean>静静态态

Aop:面向切面

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值