2020-09-04【Java编程思想】

java 数字字符串判断

//?:0或1个, *:0或多个, +:1或多个 
 Boolean strResult = str.matches("-?[0-9]+.?[0-9]*");    
 if(strResult == true) { 
	//  代表是数字字符串
}

《Java编程思想》

  • 构造函数实际上是static方法,只不过该static声明是隐式的。因此,构造函数不能够被override,同样,它也不具有多态
  • private方法本质上属于final方法,因为不能被子类访问
class Glyph {
    void draw() {
        System.out.println("Glyph.draw()");
    }
    //  构造函数和 this 它不具有多态性
    Glyph() {
        System.out.println("Glyph() before draw()");
        //  在父类构造函数内部调用具有多态行为的函数将导致无法预测的结果
        //  此时,子类对象还没初始化,不推荐【x】
        draw();
        System.out.println("Glyph() after draw()");
    }
}

class RoundGlyph extends Glyph {

	//  在子类中,新方法名最好不要与基类的private方法采取同一名字,
	// 不推荐【x】 容易误解
    private int radius = 1;
     //  构造函数和 this
    RoundGlyph(int r) {
        radius = r;
        System.out.println("RoundGlyph.RoundGlyph(). radius = " + radius);
    }

    void draw() {
        System.out.println("RoundGlyph.draw(). radius = " + radius);
    }
}
//  test  class
public class PolyConstructors {

    public static void main(String[] args) {
        new RoundGlyph(5);

    }

}
  • java 编程单元(class)
  • java 方法的动态绑定/ 通常情况下,我们不必判定是否应该进行动态绑定—它会自动发生。

class StaticSuper {
    public static String staticGet() {
        return "Base staticGet()";
    }

    public String dynamicGet() {
        return "Base dynamicGet()";
    }
}

//  extends  继承和多态/ 单继承
class StaticSub extends StaticSuper {
    public static String staticGet() {
        return "Derived staticGet()";
    }

    public String dynamicGet() {
        return "Derived dynamicGet()";
    }
}

// java 测试类
public class StaticPolymorphism {

	//  psvm 测试方法
    public static void main(String[] args) {
    	//  new  对象   和  ioc  反转
        StaticSuper sup = new StaticSub();
        System.out.println(sup.staticGet());
        System.out.println(sup.dynamicGet());
    }

}

Java中构造函数的调用顺序

  • 分配内存
  • 调用基类构造函数
  • 按声明顺序调用成员的初始化方法
  • 调用子类构造函数
  • 只有非private方法才可以被覆盖
  • 父类和子类的同名属性都会分配不同的存储空间

一个spring Bean从创建到销毁

  • 包扫描操作,并对其进行实例化操作
  • 依赖注入
  • 判断是否实现了BeanNameAware接口 封装 setter/getter
  • 判断是否实现了BeanFactoryAware接口 封装对象工厂类
  • 判断是否实现了ApplicationContextAware接口 获取上下文
  • 判断是否实现了BeanPostProcessor接口 ?
  • 判断Bean是否配置了init-method
  • 判断Bean是否实现了BeanPostProcessor接口 完成bean 初始化
  • 一般是在ApplicationContext执行close方法时会进行销毁操作。
  • 在销毁过程中,判断是否实现了DisposableBean接口,如果有则执行destroy方法。
  • 判断Bean是否配置了destroy-method,如果有,在销毁过程中会默认执行一次destroy-method方法。

spring 处理流程

  • BeanFactory
  • 添加事件(方法)
  • 实例化
  • 调用事件(事件监听)

springBoot 事务管理

  • class
  • @EnableTransactionManagement //开启声明式事务
  • @Configuration
  • method
  • @Transactional 事务回滚/提交
  • @Override
  • @Bean
  • var java 变量声明
  • @Resource
  • @Autowired





<dependency>
   <groupId>org.springframework.bootgroupId>
   <artifactId>spring-boot-starter-jdbcartifactId>
   <scope>testscope>
dependency>
 
 
<dependency>
   <groupId>org.springframework.bootgroupId>
   <artifactId>spring-boot-starter-data-jpaartifactId>
   <scope>testscope>
dependency>

spring AOP、ORM、事务管理


<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
    <property name="driverClass" value="${jdbc.driver}"/>
    <property name="jdbcUrl" value="${jdbc.url}"/>
    <property name="user" value="${jdbc.username}"/>
    <property name="password" value="${jdbc.password}"/>
    
    
    <property name="maxPoolSize" value="${c3p0.pool.maxPoolSize}"/>
    
    <property name="minPoolSize" value="${c3p0.pool.minPoolSize}" />
    
    <property name="initialPoolSize" value="${c3p0.pool.initialPoolSize}"/>
    
    <property name="acquireIncrement" value="${c3p0.pool.acquireIncrement}"/>
bean>
 

<bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    <property name="dataSource" ref="dataSource"/>
bean>
 

<tx:advice id="txAdivce" transaction-manager="txManager">
    <tx:attributes>
        <tx:method name="insert*" propagation="REQUIRED"/>
        <tx:method name="update*" propagation="REQUIRED"/>
        <tx:method name="delete*" propagation="REQUIRED"/>
        <tx:method name="save*" propagation="REQUIRED"/>
        
        <tx:method name="find*" read-only="false"/>
        <tx:method name="get*" read-only="false"/>
        <tx:method name="view*" read-only="false"/>
    tx:attributes>
tx:advice>
 

<aop:config>
    <aop:pointcut expression="execution(* com.*.service.*.*(..))" id="txPointcut"/>
    <aop:advisor advice-ref="txAdivce" pointcut-ref="txPointcut"/>
aop:config>

你可能感兴趣的:(spring)