一、属性注入
1、有参构造注入
public class PropertyDemo1{
private String username
;
public PropertyDemo1(String username
){
this.username
=username
;
}
public void test1(){
System
.out
.println(username
);
}
}
bean1
.xml中配置:
<bean id
="demo" class="cn.itcast.property.PropertyDemo1">
<constructor
-arg name
="username" value
="小王"></constructor
-arg
>
</bean
>
2、set注入
public class Book{
private String bookname
;
public void setBookname(String bookname
){
this.bookname
=bookname
;
}
public void demobook(){
System
.out
.println("book..."+bookname
);
}
}
public class TestIOC{
@Test
public void testUser(){
ApplicationContext context
=ClassPathXmlApplicationContext("bean1.xml");
Book book
=(Book
)context
.getBean("book");
book
.demobook();
}
}
bean1
.xml配置:
<bean id
="book" class="cn.itcast.property.Book">
<property name
="bookname" value
="ysy"></property
>
</bean
>
3、注入对象类型属性:
1)在bean1
.xml中配置:
<bean id
="userDao" class="cn.itcast.ioc.UserDao"></bean
>
<bean id
="userService" class="cn.itcast.ioc.UserService">
<!--注入dao对象
现在不要写value 因为刚才使字符串现在是对象
name
:service类里面属性名称
写ref属性:dao配置bean标签id值
-->
<property name
="userDao" ref
="userDao" ></property
>
</bean
>
2)UserService类
public class UserService{
private UserDao userDao
;
public void setUserDao(){
this.userDao
=userDao
;
}
public void add(){
System
.out
.println("service...");
userDao
.add();
}
}
public class UserDao{
public void add(){
System
.out
.println("userDao...");
}
}
public class TestIOC{
@Test
public void testUser(){
ApplicationContext context
=ClassPathXmlApplicationContext("bean1.xml");
UserService userService
=(UserService
)context
.getBean("userService");
userService
.add();
}
}
4、p名称空间注入:
public class Person{
private String pname
;
public void setPname(String name
){
this.pname
=pname
;
}
public void test1(){
System
.out
.println("person..."+pname
);
}
}
在bean1
.xml中配置:
<bean id
="person" class="cn.itcast.property.Person" p
:pname
="lucy"></bean
>
5、注入复杂属性
public class Person{
private String pname
;
private String
[] arrs
;
private List
<String> list
;
private Map
<String,String> map
;
private Properties properties
;
public void setArrs(String
[] arrs
){
this.arrs
=arrs
;
}
public void setList(List
<String> list
){
this.list
=list
;
}
public void setMap(Map
<String,String> map
){
this.map
=map
;
}
public void setProperties(Properties properties
){
this.properties
=properties
;
}
public void setPname(String name
){
this.pname
=pname
;
}
public void test1(){
System
.out
.println("person..."+pname
);
}
}
在bean1
.xml中配置
<bean id
="person" class="cn.itcast.property.Person" >
<!--数组
-->
<property name
="arrs">
<list>
<value>小王
</value
>
<value>小礼
</value
>
<value>小课
</value
>
</list
>
</property
>
<!--list 集合
-->
<property name
="list">
<list>
<value>小奥
</value
>
<value>小深
</value
>
<value>小得
</value
>
</list
>
</property
>
<!--map集合
-->
<property name
="map">
<map>
<entry key
="aa" value
="lucy">小奥
</entry
>
<entry key
="bb" value
="mary">小深
</entry
>
<entry key
="cc" value
="tom">小得
</entry
>
</map
>
</property
>
<!--properties
-->
<property name
="properties">
<pros>
<prop key
="driverClass">com
.mysql
.jdbc
.Driver
</prop
>
<prop key
="username">root
</prop
>
</pros
>
</property
>
</bean
>
二、spring的bean管理(注解方式)
1、注解写法:
@注解名称(属性名称
=属性值
)
2、注解适用范围:
类上面 方法上 属性上
3、spring注解开发准备:
1)导入jar包
:
(1)导入基本的jar包
commons
-logging
-1.2.jar
log4j
-1.2.16.jar
spring
-beans
-4.2.4.RELEASE
.jar
spring
-context
-4.2.4.RELEASE
.jar
spring
-core
-4.2.4.RELEASE
.jar
spring
-expression
-4.2.4.RELEASE
.jar
(2)导入aop的jar包
spring
-aop
-4.2.4.RELEASE
.jar
2)创建类
@Component(value
="user")
public class User{
public void add(){
System
.out
.println("add...");
}
}
public class TestAnno{
@Test
public void testUser(){
ApplicationContext context
=new ClassPathXmlApplicationContext("bean1.xml");
User user
=(User
)context
.getBean("user");
user
.add();
}
}
3)创建spring配置文件 引入约束
(
1)第一天做ioc基本功能 引入约束beans
(
2)做spring的注解开发 引入新的context约束
<!--在配置文件只需要配置开启注解扫描:
(1)到包里面扫描类、方法、属性上面是否有注解
(2)base
-package :要配置注解的类所在的包名
-->
<context
:component
-scan base
-package="cn.itcast"></context
:component
-scan
>
4)创建对象有四个注解:
@Controller :web层
@Service :业务层
@Repository :持久层
@Component
4、spring注解方式注入属性:
@Service(value
="userService")
public class UserService{
@Autowired
private UserDao userDao
;
public void add(){
userDao
.add();
}
}
@Service(value
="userService")
public class UserService{
@Resource(name
="userService");
private UserDao userDao
;
public void add(){
userDao
.add();
}
}
@Seervice(value
="userDao")
public class UserDao{
public void add(){
System
.out
.println("userDao。。。");
}
}
5、注解和配置文件混合使用:
1、创建对象使用配置文件实现
2、注入属性用注解实现
public class BookService{
@Resource(name
="bookDao")
private BookDao bookDao
;
@Resource(name
="ordersDao")
private OrdersDao ordersDao
;
public void add(){
System
.out
.println("service...");
}
}
public class OrdersDao{
public void buy(){
System
.out
.println("ordersdao...");
}
}
public class BookDao{
public void book(){
System
.out
.println("bookdao...");
}
}
public class TestAnno{
@Test
public void testService(){
ApplicationContext context
=new ClassPathXmlApplicationContext("bean2.xml");
BookService bookService
=(BookService
) context
.getBean("bookService");
bookService
.add();
}
}
bean2
.xml
:
<!--开启注解扫描
-->
<context
:component
-scan base
-package="cn.itcast"></context
:component
-scan
>
<!--创建对象
-->
<bean id
="bookService" class="cn.itcast.xmlanno.BookService"></bean
>
<bean id
="bookDao" class="cn.itcast.xmlanno.BookDao"></bean
>
<bean id
="ordersDao" class="cn.itcast.xmlanno.OrdersDao"></bean
>
三、AOP
1、AOP
:
采取横向抽取机制 取代传统纵向继承体系
2、AOP操作术语
1、Pointcut(切入点
):
2、
Advice(
3、spring的AOP操作:
1、在spring里面进行aop操作 s使用aspectjsshi实现
1)aspectj不是spring一部分 和spring一起使用进行aop操作
2)spring2
.0以后x新增了对aspectj的支持
2、使用aspectj实现aop由两种方式
1)基于aspect的xml配置
2)基于aspect的注解
3、spring配置文件方式:
1、导入jar
:
aopalliance
-1.0.jar
aspectjweaver
-1.8.7.jar
spring
-aop
-4.2.4.RELEASE
.jar
spring
-aspects
-4.2.4.RELEASE
.jar
2、创建spring核心配置文件、导入aop约束
bean3
.xml
:
<!--配置对象
-->
<bean id
="book" class="cn.itcast.aop.Book"></bean
>
<bean id
="myBook" class="cn.itcast.aop.MyBook"></bean
>
<!--配置aop操作
-->
<aop
:config
>
<!--2.1配置切入点 id
:给切入点配置名字 自己取
-->
<aop
:pointcut expression
="execution(* cn.itcast.aop.Book.*(..))" id
="pointcut1"/>
<!--2.2配置切面
-->
<aop
:aspect ref
="myBook">
<aop
:before method
="before1" pointcut
-ref
="pointcut1"/>
<aop
:after
-returning method
="after1" pointcut
-ref
="pointcut1"/>
<aop
:after
-returning method
="around1" pointcut
-ref
="pointcut1"/>
</aop
:aspect
>
</aop
:config
>
3、使用表达式配置切入点
(
1)
execution(* cn
.itcast
.aop
.Book
.add(..));
(2)excution(*cn
.itcast
.aop
.Book
.*
(..));
(3)excution(* *.*
(..));
(4)excution(* save
*(..));
public class Book{
public void add(){
System
.out
.println("add...");
}
}
public class MyBook{
public void befor1(){
System
.out
.println("前置增强..");
}
public void after1(){
System
.out
.println("后置增强..");
}
public void around1(ProceedingJoinPoint proceedingJoinPoint
) throw Throwable
{
System
.out
.println("方法之前...");
proceedingJoinPoint
.proceed();
System
.out
.println("方法之后...");
}
}
public class TestAnno{
@Test
public void testService(){
ApplicationContext context
=new ClassPathXmlApplicationContext("bean3.xml");
Book book
=(Book
)context
.getBean("book");
book
.add();
}
}
4、spring注解方式
1、创建类
public class Book{
public void add(){
System
.out
.println("add...");
}
}
@Aspect
public class MyBook{
@Before(value
="execution(* cn.itcast.aop.Book.*(..))")
public void before1(){
System
.out
.println("before..");
}
}
public class TestAnno{
@Test
public void testService(){
ApplicationContext context
=new ClassPathXmlApplicationContext("bean3.xml");
Book book
=(Book
)context
.getBean("book");
book
.add();
}
}
2、创建spring核心配置文件、导入aop约束
bean3
.xml
:
<!--配置对象
-->
<bean id
="book" class="cn.itcast.aop.Book"></bean
>
<bean id
="myBook" class="cn.itcast.aop.MyBook"></bean
>
<!--开启aop操作
-->
<aop
:aspectj
-autoproxy
></aop
:aspectj
-autoproxy
>
四、spring的jdbcTemplate
1、jdbcTemplate对jdbc进行封装
2、增加 删除 修改 查询:
1)导入jar包
spring
-jdbc
-4.2.4.RELEASE
.jar
spring
-tx
-4.2.4.RELEASE
.jar
导入数据库驱动
2)创建对象 sh设置数据库信息
3)创建jdbcTemplate对象 设置数据源
4)调用jdbcTemplate模板方法
public class JdbcTemplateDemo1{
@Test
public void add(){
DriverManagerDateSource dataSource
=new DriverManagerDateSource();
dataSource
.setDriverClassName("com.mysql.jdbc.Driver");
dataSource
.setUrl("jdbc:mysql:///spring_day03");
dataSource
.setUsername("root");
dataSource
.setPassword("root");
IdbcTemplate jdbcTemplate
=new JdbcTemplate(dataSource
);
String sql
="insert into user value(?,?)";
int rows
=jdbcTemplate
.update(sql
,"lucy","250");
}
@Test
public void update(){
DriverManagerDateSource dataSource
=new DriverManagerDateSource();
dataSource
.setDriverClassName("com.mysql.jdbc.Driver");
dataSource
.setUrl("jdbc:mysql:///spring_day03");
dataSource
.setUsername("root");
dataSource
.setPassword("root");
IdbcTemplate jdbcTemplate
=new JdbcTemplate(dataSource
);
String sql
="update user set password=? where username=?";
int rows
=jdbcTemplate
.update(sql
,"1314","lucy");
}
@Test
public void delete(){
DriverManagerDateSource dataSource
=new DriverManagerDateSource();
dataSource
.setDriverClassName("com.mysql.jdbc.Driver");
dataSource
.setUrl("jdbc:mysql:///spring_day03");
dataSource
.setUsername("root");
dataSource
.setPassword("root");
IdbcTemplate jdbcTemplate
=new JdbcTemplate(dataSource
);
String sql
="delete from user where username=?";
int rows
=jdbcTemplate
.update(sql
,"lucy");
}
@Test
public void testQuery(){
DriverManagerDateSource dataSource
=new DriverManagerDateSource();
dataSource
.setDriverClassName("com.mysql.jdbc.Driver");
dataSource
.setUrl("jdbc:mysql:///spring_day03");
dataSource
.setUsername("root");
dataSource
.setPassword("root");
IdbcTemplate jdbcTemplate
=new JdbcTemplate(dataSource
);
String sql
="select count(*) from user";
int count
=jdbcTemplate
.queryForObject(sql
,Integer
.class);
}
@Test
public void testObject(){
DriverManagerDateSource dataSource
=new DriverManagerDateSource();
dataSource
.setDriverClassName("com.mysql.jdbc.Driver");
dataSource
.setUrl("jdbc:mysql:///spring_day03");
dataSource
.setUsername("root");
dataSource
.setPassword("root");
IdbcTemplate jdbcTemplate
=new JdbcTemplate(dataSource
);
String sql
="select * from user where username=?";
User user
=jdbcTemplate
.queryForObject(sql
,new MyRowMapper(),"mary");
}
}