spring随笔

1 篇文章 0 订阅
1 篇文章 0 订阅

spring的IOC容器为我们提供了 对象的实例化与属性的赋值,放在对应的配置文件里面,我们只需要获取对应的对象,然后调用对应的方法即可。

<!-- 配置map属性值 -->
    <bean id = "newPerson" class= "com.spring.beans.collections.NewPerson2">
    <property name="name" value = "Rose"></property>
    <property name="age" value = "23"></property>
    <property name="mapCar">
    <!-- 使用map节点及map的entry子节点配置map类型的成员变量-->
        <map>
            <entry key = "AA" value-ref="car"></entry>
            <entry key = "BB" value-ref="car2"></entry>
        </map>
    </property>
    </bean>

<bean id ="dataSource" class = "com.spring.beans.collections.DataSource">
    <!-- 使用props与 prop子节点来为Property赋值-->
    <property name="properties">
    <props>
        <prop key="user">root</prop>
        <prop key="password">1234</prop>
        <prop key="jdbcUrl">jdbc:mysql:///test</prop>
        <prop key="driverClass">com.mysql.jdbc.driverClass</prop>
    </props>
    </property>

spring提供了一个PropertyPlaceholderConfiger的BeanFactory后置处理器,这个处理器允许用户将Bean配置的部分内容移到属性文件中,可以在Bean配置文件里面使用形式为${var}的变量,PropertyPlaceholderConfigurer从属性文件里加载属性,并使用这些属性才替换变量

Spring还允许在属性文件中使用${proName},以实现属性之前的相互引用.

SpEL 表达式语言,是一个支持运行时查询和操作对象图的强大的表达式语言,使用#{}作为定界符,所有在{}内的字符都被认为是SpEL

</bean>
    <!-- 实现BeanPostProcessor接口,并具体提供
     两个方法的实现
     postProcessBeforeInitialization 在init-method之前被调用
     postProcessAfterInitialization 在init-method之后被调用
     bean :bean实例本身
     beanName:IOC容器配置bean的名字
     返回值:是实际上派回给用户的那个bean,注意:可以在以上两个方法中
     修改返回的bean,甚至返回一个新的bean
     -->
    <!-- 配置bean的后置处理器 ,不需要配置id.IOC:容器自动识别是一个beanPostProcessor-->
    <bean class = "com.spring.beans.cycle.MyBeansPostProcesser"></bean>

 

(通过实例其他类来实例化bean)

<!-- 通过静态工厂方法来配置bean,注意不是配置静态工厂方法实例
    而是配置bean实例
    class 属性:指向静态工厂方法的全类型
    factory-method 指向静态工厂方法的名字
    constructor-arg:如果工厂方法需要传入参数,则使用
    constructor-arg 来配置参数
     -->
    <bean id = "car1" class = "com.spring.beans.factroy.StaticCarFactory"
    factory-method = "getCar">
    <constructor-arg value = "audi"></constructor-arg>
    
    </bean>
    <!-- 配置工厂的实例 -->
    <bean id = "carFactory" class = "com.spring.beans.factroy.InstanceCarFactory">
    </bean>
    <!-- 通过实例工厂方法 来配置bean-->
    <!-- 
    factory-bean 属性 指向实例工厂的方法bean
    factory-method 指向静态工厂方法的名字
    constructor-arg:如果工厂方法需要传入参数,则使用
    constructor-arg 来配置参数
     -->
    <bean id = "car2"  factory-bean="carFactory"
    factory-method="getCar"    >
    <constructor-arg value = "ford"></constructor-arg>
    </bean>

<!-- 指定spring IOC容器扫描包 -->

<!-- 可以通过 resource-pattern指定扫描的资源-->
    <context:component-scan base-package="com.pring.beans.annotions"

resource-pattern="repository/*.calss"></context:component-scan>子包一起扫描了

<!-- 指定spring IOC容器扫描包 -->
    
    <!-- 可以通过 resource-pattern指定扫描的资源-->
    <!-- <context:component-scan base-package="com.pring.beans.annotions"
    resource-pattern="repository/*.calss"
    ></context:component-scan>
     -->
     <!--context:exclude-filter 子节点指定排除那些指定表达式的组件  -->
     <!--context:include-filter 子节点指定包含哪些表达式的组件,
     该子节点需要配合use-default-filters配合使用
       -->
     <context:component-scan base-package="com.pring.beans.annotions"
    use-default-filters="false"
    >
<!--      <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Repository"/>
    -->
    <!--  <context:include-filter type="annotation" expression="org.springframework.stereotype.Repository"/>
    -->
    <!--  <context:exclude-filter type="assignable" expression="com.pring.beans.annotions.repository.UserRepository"/>
    -->
    <!-- assignable 类名的方式 -->
    <context:include-filter type="assignable" expression="com.pring.beans.annotions.repository.UserRepository"/>
    </context:component-scan>

 

SpringAop

1,加入jar包

2,在配置文件中加入aop的命名空间

3,基于注解的方式

(1)在配置文件中加入如下配置:

<aop:aspectj-autoproxy></aop:aspectj-autoproxy>

(2)把横切关注点的代码抽象到切面的类中

i,切面首先是一个IOC容器中的bean,即加入@Component注解

ii,切面还需要加入@Aspect注解

(3)在类中声明各种通知

i,声明一个方法

ii,在方法前加入@Before注解

可以用Order命令来限定切面的优先级

@Pointcut("execution( * com.spring.aop.impl.*.*(int, int))")
    public void declareJionPointExpression(){} 使用pointCut来声明切入表达式

还可以用xml形式进行配置

<!-- 配置bean -->
    <bean id = "arithemeticColculator"
    class = "com.spring.aop.impl.xml.ArithmeticCalculatorImp"
    ></bean>
    <!-- 配置切面的bean -->
    <bean id = "loggingAspect"
    class = "com.spring.aop.impl.xml.LoggingAspect"
    ></bean>
    <bean id = "validate" class = "com.spring.aop.impl.xml.Vlidation">
    </bean>
    <!--配置aop  -->
    <aop:config>
    <!-- 配置切点表达式 -->
    <aop:pointcut expression="execution(* com.spring.aop.impl.xml.*.*(int, int)))" id="pointcut"/>
    <!--配置切面及通知  -->
    <aop:aspect ref = "loggingAspect" order = "2">
    <aop:before method="beforeMethod" pointcut-ref="pointcut"/>
    <aop:after method="afterMethod" pointcut-ref="pointcut"/>
    </aop:aspect>
    <aop:aspect ref = "validate" order = "1">
    <aop:before method="validateArgs" pointcut-ref="pointcut"/>
    </aop:aspect>
    </aop:config>

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值