Spring基础

Spring的设计理念

   Spring是面向Bean的编程

Spring 两大核心技术

   控制反转(IoC:Inversion of Control ) /依赖注入(DI:Dependency Injection ) :是面向对象编程的一种设计理念,用来降低程序代码之间的耦合度,将创建对象的控制权交给容器
   面向切面编程(AOP:Aspect Oriented Programming): 在不影响原有代码的情况下,添加(扩展)新的功能

spring的优点

     1.低侵入式设计
     2.独立于各种应用服务器
     3.依赖注入特性将组件关系透明化,降低了耦合度
     4.面向切面编程特性允许将通用任务进行集中式处理
     5.与第三方框架的良好整合

=================================================================

设值的方式

<bean id="user" class="cn.bdqn.printer.user">
        <property name="name" class="张三"></property>
        <property name="age" ref="19"></property>
        <property name="ink" ref="colorInk"></property>
        <property name="paper" ref="a4Paper"></property>
</bean>

P命名空间设值

使用前要先要在Spring配置文件中引入p命名空间

 xmlns:p="http://www.springframework.org/schema/p"

例:

<bean id="user" class="entity.User" p:age="23" p:username="张三" p:email="zhangsan@xxx.com" />
<bean id="userService" class="service.impl.UserServiceImpl" p:dao-ref="userDao" />

使用构造参数设值

<bean name="User" class="sping_day02.Demo3.User">
        <constructor-arg value="张三" index="0"></constructor-arg>
        <constructor-arg value="三天不打弟弟东,手痒痒" index="1"></constructor-arg>
</bean>

注入不同的值

//注入特殊字符串1
<property name="string1">
     <value>萨达&amp;</value>
</property>

//注入特殊字符串2
<property name="string2">
      <value>dadasdas</value>
</property>

//注入实体
<property name="user">
      <bean class="sping_day02.Demo2.pojo.User">
           <property name="name" value="张三"></property>
           <property name="speak" value="撒大大"></property>
      </bean>
</property>

//注入list集合
<property name="list">
     <list>
           <value>弟弟东1</value>
           <value>弟弟东2</value>
           <value>弟弟东3</value>
      </list>
</property>

//注入数组
<property name="array">
     <array>
          <value>啊山1</value>
          <value>啊山2</value>
          <value>啊山3</value>
     </array>
</property>

//注入set集合
<property name="set">
      <set>
          <value>博龙1</value>
          <value>博龙2</value>
          <value>博龙3</value>
      </set>
</property>

//注入map
<property name="map">
            <map>
                <entry>
                    <key><value>222</value></key>
                    <value>adahk</value>
                </entry>
                <entry>
                    <key><value>3333</value></key>
                    <value>sfadsfs</value>
                </entry>
            </map>
</property>

//注入Properties属性
<property name="prop">
            <props>
                <prop key="dasd">撒大大</prop>
                <prop key="fdxcs">dsfssd</prop>
            </props>
</property>

//注入空值
<property name="emptyValue">
            <value></value>
</property>

//注入null值
<property name="nullValue">
            <null></null>
</property>

==============================================================================

spring配置

IOC配置

// scope bean的作用域 singleton 单例  prototype 多例
// init-method 初始化方法 
// destroy-method 销毁方法
<bean id="user" class="cn.bdqn.printer.user" scope="singleton" init-method="ini" destroy-method="destroy">
        <property name="name" class="张三"></property>
        <property name="age" ref="19"></property>
        <property name="ink" ref="colorInk"></property>
        <property name="paper" ref="a4Paper"></property>
</bean>

AOP配置

    <!--配置aop-->
    <!--声明增强方法所在的类-->
    <bean id="Logger" class="sping_day02.aop.service.UserServiceLogger"></bean>
    <!--配置切面-->
    <aop:config>
        <!--配置切入点-->
        <aop:pointcut id="add" expression="execution(* sping_day02.aop.service.*.*(..))"/>
        <!--引入增强方法-->
        <aop:aspect ref="Logger">
            <!--前置增强 method:调用增强类里面的哪个方法  pointcut-ref:要增强的类-->
            <aop:before method="before" pointcut-ref="add"></aop:before>
            <!--后置增强 returning:返回值-->
            <aop:after-returning method="afterReturning" pointcut-ref="add" returning="result"></aop:after-returning>
            <!--异常增强 throwing:异常-->
            <aop:after-throwing method="errorLogger" pointcut-ref="add" throwing="e"></aop:after-throwing>
            <!--最终增强-->
            <aop:after method="after" pointcut-ref="add"></aop:after>
            <!--环绕增强-->
            <aop:around method="aroundLogger" pointcut-ref="add"></aop:around>
        </aop:aspect>
    </aop:config>

==============================================================================

spring注入

1.setter注入

<bean name="userDao" class="sping_day02.Demo2.dao.UserDaoImpl"></bean>
<bean name="userService" ref="userDao"></bean>

UserService userService;
public void setUserService(UserService userService){
     this.userService = userService;
}

2.构造器注入

<bean name="UserDao" class="sping_day02.Demo2.dao.UserDaoImpl"></bean>
<bean name="UserService" class="sping_day02.Demo2.service.UserServiceImpl">
        <constructor-arg ref="UserDao"></constructor-arg>
</bean>

UserDao userDao = null;

public UserServiceImpl(UserDao userDao) {
    System.out.println("进入构造");
    this.userDao = userDao;
}

3.注解注入

IOC注解

<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:context="http://www.springframework.org/schema/context"  ****
    xsi:schemaLocation="......
    http://www.springframework.org/schema/context     ****
    http://www.springframework.org/schema/context/spring-context-3.2.xsd">  ****
    <!-- 扫描包中注解标注的类 -->
    <context:component-scan base-package="service,dao" /> ****
</beans>

@Component Bean组件的定义
@Repository Dao层
@Service Service层
@Controller 控制层
@Autowired 实现Bean的自动装配,默认按类型匹配
@Qualifier(“userDao”) 指定Bean的名称,同上
public void setDao((@Qualifier(“userDao”) UserDao dao) 也可以对方法的入参进行标注
JAVA的注解
@Resoirce 实现Bean的自动装配,默认按类型匹配

注:需要在xml中配置扫描包中注解标注的类

============================================================================

AOP注解

@Aspect 定义切面
@Pointcut 设置切入点
@Before 前置增强
@AfterReturning 后置增强
@AfterThrowing 异常增强
@After 最终增强
@Around 环绕增强

<!--配置扫描-->
<context:component-scan base-package="sping_day03.Demo2"></context:component-scan>
<!--配置切面-->
<bean class="sping_day03.Demo2.dao.UserServiceLogger"></bean>
<!--开启AOP注解-->
<aop:aspectj-autoproxy/>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值